opencv实现替换证件照颜色

程序可以实现蓝色底片变为红色底片(但有点小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 
#include 
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;

void hsv_test(string fname){
    Mat img = imread(fname);
    qDebug()<HSV
    vector channels;
    split(img,channels);
    for (int i = 0; i < img.rows; i++){//每一行
    //分离出3个通道,channels[0]代表h
        unsigned char* data = channels[0].ptr(i);
        //每一行第一个元素的指针
        //unsigned char:8bit
        for (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--->BGR
    imshow("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();
}

通过修改相关参数可以比较方便地实现改变图片的颜色

你可能感兴趣的:(opencv,人工智能,计算机视觉)