opencv实现替换证件照颜色

该程序通过OpenCV库将蓝色底片转换为红色底片,主要利用了HSV颜色模型。代码中包含了图片的缩放、颜色空间转换、通道分离与合并等步骤,通过对H通道的值进行条件判断实现了颜色的变化。存在一个小bug,可能未完全按预期将蓝色转换为红色。
摘要由CSDN通过智能技术生成

程序可以实现蓝色底片变为红色底片(但有点小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);
    resize(img,img,Size(300,500),0,0,INTER_AREA);//调整图片大小
    /*resize(InputArray src, OutputArray dst, Size dsize,
    double fx=0, double fy=0, int interpolation=INTER_LINEAR )
    INTER_AREA:一种插值的方式
    fx:width方向的缩放比例,如果它是0,那么它就会按照(double)dsize.width/src.cols来计算;
    fy:height方向的缩放比例,如果它是0,那么它就会按照(double)dsize.height/src.rows来计算;
    参考:https://blog.csdn.net/xidaoliang/article/details/86504720
    */
    imshow("src", img);
    cvtColor(img,img,COLOR_BGR2HSV);//BGR--->HSV
    vector<Mat> channels;
    split(img,channels);
    for (int i = 0; i < img.rows; i++){
    //每一行
    //分离出3个通道,channels[0]代表h
        unsigned char* data = channels[0].ptr<unsigned char>(i);
        //每一行第一个元素的指针
        //unsigned char:8bit
        for (int j = 0; j < img.cols; j++){//每一个
            int temp = data[j];
            //h的范围:0---180
            //蓝色的h值范围在:100---124
            //红色的h值范围在156---180
            //这句是蓝色变红色:
            if(temp<=124 && temp>=100)temp = 180;



            //红色的h值范围在156---180
            //绿色的h值范围在35---77
            //这句是红色变绿色
            if(temp>=156 && temp<=180)temp=77;
            data[j] = temp;
        }
    }
    Mat result;
    merge(channels, result);
    cvtColor(result, result, COLOR_HSV2BGR);//HSV--->BGR
    imshow("result", result);
    waitKey();
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    string path="D:\\Qt\\Qt5Book\\Qt5.14\\opencv\\try1\\widget\\5.png";
    hsv_test(path);
    return a.exec();
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lpl还在学习的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值