程序可以实现蓝色底片变为红色底片(但有点小bug)
修改自:opencv:HSV颜色模型_opencv hsv_君浪的博客-CSDN博客
相关文章:OpenCV Mat数据类型指针ptr的使用_cv::mat ptr_AoboSir的博客-CSDN博客
【OpenCV】HSV颜色识别-HSV基本颜色分量范围_hsv opencv范围_Taily老段的博客-CSDN博客
OpenCV 中的split函数和merge函数 及示例_opencv split_zqx951102的博客-CSDN博客
#include <QApplication>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
#include <QDebug>
using namespace cv;
using namespace std;void hsv_test(string fname){Mat img = imread(fname);qDebug()<<img.size;resize(img,img,Size(300,500),0,0,INTER_AREA);//调整图片大小imshow("src", img);cvtColor(img,img,COLOR_BGR2HSV);//BGR--->HSVvector<Mat> channels;split(img,channels);for (int i = 0; i < img.rows; i++){//每一行//分离出3个通道,channels[0]代表hunsigned char* data = channels[0].ptr<unsigned char>(i);//每一行第一个元素的指针//unsigned char:8bitfor (int j = 0; j < img.cols; j++){//每一个int temp = data[j];if(temp<=124 && temp>=100)temp = 180;//蓝色的h值范围在:100---124//红色的h值范围在156---180//绿色:35---77(215---257)data[j] = temp;}}Mat result;merge(channels, result);cvtColor(result, result, COLOR_HSV2BGR);//HSV--->BGRimshow("result", result);waitKey();//system("pause");
}
int main(int argc, char *argv[])
{QApplication a(argc, argv);string path="D:\\Qt\\Qt5Book\\Qt5.14\\opencv\\try1\\widget\\6.jpg";hsv_test(path);return a.exec();
}
通过修改相关参数可以比较方便地实现改变图片的颜色。