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

时间: 2022-05-14

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转换颜色空间更改图片背景

本文实例为大家分享了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

python3+opencv 使用灰度直方图来判断图片的亮暗操作

1.如何让计算机自动判断一张图是否偏暗?或是判断一张图是否是处于夜晚?我们可以先把图片转换为灰度图,然后根据灰度值的分布来判断,如: 我们可以从上图看到,晚上的图片的灰度值是集中在前段的,如0~30多左右,我们再看一张比较明亮的图片: 明亮的图片的灰度直方图是比较靠后的. 因此要判断图片的亮暗,只需要统计偏暗的像素个数,再除以图片像素的总个数,得到百分比p即可,至于p大于多少即判断为暗,则可以由你自己设置.下面给出代码,此代码可以在装满图片的目录里选出偏暗的图片,然后把这些图片保存下来. 2.代

vue.js 输入框输入值自动过滤特殊字符替换中问标点操作

我就废话不多说了,大家还是直接看代码吧~ <Input v-model="relatedWords" type="textarea" placeholder="请输入" @input='verifyInput(formItem.relatedWords)'/> verifyInput(v){ let _this=this; let punctuation = /[`~!@#$%^&*_\-=<>?:"{}

OpenCV cv.Mat与.txt文件数据的读写操作

本篇文章主要介绍了OpenCV cv.Mat 与 .txt 文件数据的读写操作,小编觉得挺不错的,现在分享给大家. 1.按OpenCV格式实现的 .txt 文件读写 可以用 cvSave 和 cvLoad 实现,格式和 .xml/.yml 的差不多,不过如果专用与 OpenCV 的数据读写,还是用  .xml/.yml 文件格式较好,我比较喜欢 .yml 格式,可读性非常棒. 用 cvSave 和 cvLoad 读写 .txt 文件,其实现方式和数据格式与 .yml 文件基本一致. 例如:cvS

vue中父子组件传值,解决钩子函数mounted只运行一次的操作

因为mounted函数只会在html和模板渲染之后会加载一次,但是在子组件中只有第一次的数据显示是正常的,所以需要再增加一个updated函数,在更新之后就可以重新进行取值加载,完成数据的正常显示. beforCreate(创建之前) Created(创建之后) beforMount(载入之前) Mounted(载入之后) beforUpdate(更新之前) Updated(更新之后) beforDestroy(销毁之前) Destroyed(销毁之后) activate(keep-alive组

基于Opencv实现颜色识别

彩色模型   数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB模型.而HSV模型更符合人描述和解释颜色的方式,HSV的彩色描述对人来说是自然且非常直观的. HSV模型 HSV模型中颜色的参数分别是:色调(H:hue),饱和度(S:saturation),亮度(V:value).由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model). (1

OpenCV图像颜色反转算法详解

前言 图像颜色的反转,比较简单的思路就是使用255减去当前值,从而得到反转后的图像.原始图片: 1.灰度图像的颜色反转 import cv2 import numpy as np # 灰度 0-255 255-当前灰度值 img = cv2.imread('image0.jpg', 1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) d

OpenCV HSV颜色识别及HSV基本颜色分量范围

一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出). H:  0 - 180 S:  0 - 255 V:  0 - 255 此处把部分红色归为紫色范围: 目前在计算机视觉领域存在着较多类型的颜色空间(color space).HSL和HSV是两种最常见的圆柱坐标表示的颜色模型,它重新影射了RGB模型,从而能够视觉上比RGB模型更具有视觉直观性. HSV颜色空间  HSV(hu

python opencv根据颜色进行目标检测的方法示例

颜色目标检测就是根据物体的颜色快速进行目标定位.使用cv2.inRange函数设定合适的阈值,即可以选出合适的目标. 建立项目colordetect.py,代码如下: #! /usr/bin/env python # -*- coding: utf-8 -*- import numpy as np import cv2 def colorDetect(): image = cv2.imread('./1.png') # 使用RGB颜色空间检测红 蓝 黄 灰,设置合适的阈值 boundaries

OpenCV 颜色追踪的示例代码

FPS 每秒帧数 背景消除建模 BSM Background SUbtraction BS算法 图像分割(GMM-高斯混合模型) 机器学习(KNN-K临近) #include <opencv2/core/utility.hpp> #include <opencv2/tracking.hpp> #include <opencv2/videoio.hpp> #include <opencv2/highgui.hpp> #include<opencv2/op