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更改图片颜色内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • opencv转换颜色空间更改图片背景

    本文实例为大家分享了opencv转换颜色空间更改图片背景的具体代码,供大家参考,具体内容如下 思路: 1.将BGR转换为HSV颜色空间 2.设置掩模 3.位运算 这里以更改摩托罗拉logo背景为例,图片在必应图片搜索得知,具体代码如下: import numpy as np import cv2 from imageio import imread import matplotlib.pyplot as plt def show(img,winname = "img"): cv2.na

  • Opencv判断颜色相似的图片示例代码

    问题描述 有一个项目,大体是要判断一下一篇文章内的配图突不突兀. 素材准备 所以就从网上随便找了4张图: 可以看出,前3张图片从颜色上.从阅读感受上,应该是相似的,而最后一张应该是不同的. 而当我们只对图片做缩放(为了跑得快),然后用bgr通道出直方图算相似度时: 却发现,只有第一张和第二张图片的相似度是大于0.5的,而第二.三张,以及第三.四张图片之间的相似度几乎都小于等于0.1. 思考方法 于是,经过思考后我觉得,判断两张图片在颜色上相不相似,其本质在于判断其直方图分布的形状相不相似,而不应

  • opencv之颜色过滤只留下图片中的红色区域操作

    如图,这次需要在图片中找到卷尺的红色刻度,所以需要对图像做过滤,只留下红色部分. 一开始的想法是分别找到RGB值,然后找到红色区域的部分保留就可以了,不过好像很难确定红色区域的RGB取值范围,所以要把图片转化到HSV空间中去. 在opencv中直接使用cvCvtColor函数就可以啦. IplImage* hsv = cvCreateImage( cvGetSize(image), 8, 3 ); cvCvtColor(image,hsv,CV_BGR2HSV); opencv 的H范围是0~1

  • opencv如何识别图片上带颜色的圆

    本文实例为大家分享了opencv识别图片上带颜色的圆的具体代码,供大家参考,具体内容如下 识别带颜色的圆,首先需要先查询该颜色的HSV值,下图部分紫色归为红色了: 比如红色: //红色的HSV值 int low_H = 0,low_S = 123,low_V = 100; int High_H = 5,High_S = 255,High_V = 255; 然后将图片从BGR转化成HSV,接着二值化: cvtColor(image,src,COLOR_BGR2HSV); //从BGR-> HSV

  • 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 = imr

  • opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器

    定位色块常用到hsv色彩空间下的颜色阈值,笔者曾经用openmv时,其IDE有自带一个阈值编辑器,使用起来非常方便,现在在linux上跑cv算法,需要类似的功能,因此自己写了一个阈值编辑器. 目前暂时只支持HSV色彩空间下的阈值编辑. 代码: mian.py: from threshold_ui import Ui_Widget from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import QImage,QPixmap,QFon

  • 通过OpenCV实现对指定颜色的物体追踪

    本文实现对特定颜色的物体追踪,我实验用的是绿萝的树叶. 新建脚本ball_tracking.py,加入代码: import argparse from collections import deque import cv2 import numpy as np 导入必要的包,然后定义一些函数 def grab_contours(cnts): # 如果 cv2.findContours 返回的轮廓元组的长度为"2",那么我们使用的是 OpenCV v2.4.v4-beta 或 v4-of

  • Python OpenCV超详细讲解基本功能

    目录 准备工作 转成灰度图像 高斯模糊 边缘检测 膨胀运算 腐蚀运算 准备工作 右击新建的项目,选择Python File,新建一个Python文件,然后在开头import cv2导入cv2库. 转成灰度图像 调用imread()方法获取我们资源文件夹中的图片lena.png cvtColor()方法可以让我们的图片转换成任意颜色,第一个参数是我们要转换的图片,第二个参数是要转成的颜色空间,cv2.COLOR_BGR2GRAY就是由BGR变为GRAY,我们日常生活中都是RGB三通道顺序,而在Op

  • Python+OpenCV实现黑白老照片上色功能

    目录 导语 一.环境准备 二.代码展示 三.效果展示 导语 我们都知道,有很多经典的老照片,受限于那个时代的技术,只能以黑白的形式传世.尽管黑白照片别有一番风味,但是彩色照片有时候能给人更强的代入感.今天在这里给大家提供一种给黑白照片上色的方法,尽管无法还原当时真实的颜色,但确实可以达到后期者的心中所想的颜色. 当然,除了让老照片变成彩色这一用途之外,还可以将现时的一些黑白照片自行染上彩色,完全按照自己的想法来上色,再和彩色的原图进行对比,也不失为一种有趣的玩法. ——小故事 年前在家中进行过年

  • Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法

    本文实例讲述了Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法.分享给大家供大家参考,具体如下: 一.如图 二.代码实现 public class ColorImageActivity extends Activity { private ImageView mImageView; private SeekBar mSBRed,mSBGreen,mSBBlue,mSBAlpha,mSBLight; //修改后的图片 private Bitmap mModBitmap; //画布

  • java web中图片验证码功能的简单实现方法

    用户在注册网站信息的时候基本上都要数据验证码验证.那么图片验证码功能该如何实现呢? 大概步骤是: 1.在内存中创建缓存图片 2.设置背景色 3.画边框 4.写字母 5.绘制干扰信息 6.图片输出 废话不多说,直接上代码 package com.lsgjzhuwei.servlet.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buffer

  • 纯JS实现图片验证码功能并兼容IE6-8(推荐)

    最近要搞一个图片验证码功能,但是又不想自己写后台代码.于是自己准备搞一个纯前端的验证码功能,于是网上搜索了一下,找到一个插件gVerify.js,简单好用,实现完美.不过后面接到说要兼容IE8,想想也是醉了.万恶的IE,不过也还好,也没有想着在去找插件,准备自己搞一搞,顺便拿来学习一下并加强自己的知识.下面看我是如何搞定它的,虽然花了一点时间,不过也值得. 使用方法 使用特别简单,定义一个DIV一验证码输入框,引入下载的js插件,创建一个GVerify对象,参数可以自定义一些或者传入DIV的ID

  • jquery实现图片放大镜功能

    实现原理: 这里用到了两张图片,一张小图,一张大图.将大图设置为放大镜的背景图片,当鼠标在小图上移动时,同时控制背景大图在放大镜中的位置.两张图片大小最好是等比例的,这样才能达到最佳效果.当没有大图时,则默认为小图本身,这时由于两张图片大小一样,因此放大镜效果不明显,就跟没放大是一样的. 此插件用到了html5,css3的一些属性,ie8及以下版本不兼容,放大镜是方形的. 运行效果截图如下: 具体代码如下: (function () { $.fn.Magnifier = function (op

随机推荐