之前了解了图像的HSV色彩空间,使用HSV的值可以生成一些非常有趣的效果。有些用照片编辑软件所生成的色彩特效,就是用HSV色彩空间实现的。
如下,可以修改一个图像,将其所有像素设置为一个固定饱和度,不改变其色调和亮度,代码如下:
#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/opencv.hpp>using namespace cv;using namespace std;int main( ){ Mat image=imread("/Users/zhangxiaoyu/Desktop/1.png"); if(image.empty()) { cout<<"Error!cannot be read...../n"; return -1; } //转换为HSV色彩空间 Mat hsv; cvtColor(image, hsv, CV_BGR2HSV);//把三个通道分割进三个图像中 vector<Mat>channels; split(hsv, channels); //channels[0]是色调 //channels[1]是饱和度 //channels[2]是亮度 channels[1]=255;//将所有像素的颜色饱和度通道变成255 // channels[2]=200;//将所有像素的亮度通道变成255 merge(channels, hsv);//重新合并通道 Mat newimage; cvtColor(hsv, newimage, CV_HSV2BGR);//转换回BGR namedWindow("newimage"); imshow("newimage", newimage); waitKey(0); }结果如下所示:
得到的效果像一幅油画。
原始图片如下所示:
新闻热点
疑难解答