【图像处理】-019 补色
文章目录
1 补色
在学习灰度图像处理的时候,有一种操作可以形成照片底片的效果。这种操作将灰度值设置为255与该灰度值的差。
在彩色图像处理中,也有类似的操作,通过将彩色图像的色调设置为在彩色环上直接相对的另一端的值,来进行补色。
2 OpenCV实现
在实现的过程中,主要有两种思路,一种是取图像的H分量,进行“反转”之后生成结果图像,另一种是和灰度图一样处理,对RGB三个通道分别进行反转,即用255-RGB,得到结果图像。
#include "../include/importOpenCV.h"
#include "../include/baseOps.h"
#include "../include/opencv400/opencv2/core.hpp"
#include <iostream>
#include <algorithm>
int main()
{
//将工作目录设置到EXE所在的目录。
SetCurrentDirectoryToExePath();
cv::Mat src = cv::imread("../images/5.jpg");
cv::imshow("原图", src);
cv::Mat output;
src.copyTo(output);
if (src.channels() == 3)
{
cv::Mat hsvImg;
cv::cvtColor(src, hsvImg, cv::COLOR_BGR2HSV);
std::vector<cv::Mat> hsv;
cv::split(hsvImg, hsv);
hsv[0] =( cv::Scalar::all(180) - hsv[0]);
cv::merge(hsv, output);
cv::imshow("补色HSV", output);
output = cv::Scalar::all(255) - src;
cv::imshow("补色RGB", output);
}
else
{
output = cv::Scalar::all(255) - src;
cv::imshow("补色", output);
}
cv::waitKey();
return 0;
}
3 效果图
从结果图中可以看出,取H进行补色的结果更贴近定义。例如图中女孩的红色衣服,补色应该是黄色,而RGB补色结果中颜色更靠近蓝色。