Bootstrap

【图像处理】-019 补色

【图像处理】-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补色结果中颜色更靠近蓝色。

;