OpenCV实现更改图片颜色功能

 更新时间:2022年05月14日 09:50:41   作者:拽拽就是我  
这篇文章主要为大家详细介绍了如何利用OpenCV实现更改图片颜色的功能,文中代码介绍详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

原图效果:

更改颜色后效果:

直接上源码:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>

using namespace cv;
using namespace std;

int main(int argc, char const* argv[])
{
    Mat srcImg = imread("E:/img/kai.png", IMREAD_UNCHANGED); //-1不做任何改变
    Mat srcImg1 = imread("E:/img/kai.png", 0);   //0灰度
    Mat srcImg2 = imread("E:/img/kai.png", 1);  //1是color

    cout << srcImg.channels() << endl;
    cout << srcImg1.channels() << endl;
    cout << srcImg2.channels() << endl;
    
    imshow("-1", srcImg);
    imshow("0", srcImg1);
    imshow("1", srcImg2);

    //颜色有空间 RGB (1) RGBA(-1) 透明度  灰色空间(0)    
    //1、存储阶段的颜色值
    vector<Vec3d> colors;
    unsigned long index = 0;
    for (int i = 0; i < 6; ++i) {
        for (int j = 0; j < 6; ++j) {
            for (int k = 0; k < 6; ++k) {
                colors.push_back(Vec3d());
                colors[index][0] = i / 5.0 * 255;
                colors[index][1] = j / 5.0 * 255;
                colors[index][2] = k / 5.0 * 255;
                index++;
            }
        }
    }
    //2、更对对应的颜色值
    index = 0;
    Mat temp = srcImg.clone();
    while (index < colors.size()) {
        for (int r = 0; r < srcImg.rows; ++r) {
            for (int c = 0; c < srcImg.cols; ++c) {
                //获取像素点的颜色
                //c4b &pixel = srcImg.at<Vec4b>(r, c);  //4b和4d有区别的,b是uchar, d是double
                Vec4b &pixel_temp = temp.at<Vec4b>(r, c);
                //如果当前点的透明度为0
                if (pixel_temp[3] == 0) {
                    continue;
                } else {
                    for (int i = 0; i < 3; ++i) {
                        pixel_temp[i] = colors[index][i];
                    }
                }
            }     
        }
        //3、保存需要的图片
        char outImagePath[64] = {};
        sprintf_s(outImagePath, "E:/img/outImagePath/out_img_%.0f_%.0f_%.0f.png", colors[index][0], colors[index][1], colors[index][2]);
        imwrite(outImagePath, temp);
        index++;
    }   
    //waitKey(0);
    return 0;
}

到此这篇关于OpenCV实现更改图片颜色功能的文章就介绍到这了,更多相关OpenCV更改图片颜色内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用C++单例模式实现高性能配置管理器

    利用C++单例模式实现高性能配置管理器

    这篇文章主要为大家详细介绍了如何利用C++单例模式实现高性能配置管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-04-04
  • 剖析C语言关键字之void,const,return

    剖析C语言关键字之void,const,return

    这篇文章主要为大家介绍了C语言关键字之void,const,return,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C/C++表格组件Qt TableWidget应用详解

    C/C++表格组件Qt TableWidget应用详解

    本文详细讲解了C/C++中使用列表框组件Qt TableWidget的方法,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • C++高性能服务器框架之协程调度模块

    C++高性能服务器框架之协程调度模块

    这篇文章主要介绍了C++高性能服务器框架中的协程调度模块,文中通过代码示例介绍的非常详细,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-06-06
  • C++实现堆排序实例介绍

    C++实现堆排序实例介绍

    大家好,本篇文章主要讲的是C++实现堆排序实例介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C++模板元编程实现选择排序

    C++模板元编程实现选择排序

    这篇文章主要介绍了C++模板元编程实现选择排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • c++ 标准库多线程问题小结

    c++ 标准库多线程问题小结

    C++11 引入了<thread>库,使得多线程编程更加方便,以下是一些基本概念和示例,帮助你理解如何在 C++ 中进行多线程编程,这篇文章主要介绍了c++ 标准库多线程,需要的朋友可以参考下
    2025-03-03
  • 详解利用C语言如何实现简单的内存池

    详解利用C语言如何实现简单的内存池

    这篇文章主要给大家介绍了关于C语言如何实现简单的内存池的相关资料,设计内存池的目标是为了保证服务器长时间高效的运行,通过对申请空间小而申请频繁的对象进行有效管理,减少内存碎片的产生,合理分配管理用户内存,需要的朋友可以参考下
    2021-08-08
  • c语言中&的用法示例代码

    c语言中&的用法示例代码

    这篇文章主要给大家介绍了关于c语言中&的用法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • C语言题解Leetcode56合并区间实例

    C语言题解Leetcode56合并区间实例

    这篇文章主要为大家介绍了C语言题解Leetcode56合并区间实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论