OpenCV實(shí)現(xiàn)更改圖片顏色功能
原圖效果:

更改顏色后效果:

直接上源碼:
#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、存儲(chǔ)階段的顏色值
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、更對(duì)對(duì)應(yīng)的顏色值
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) {
//獲取像素點(diǎn)的顏色
//c4b &pixel = srcImg.at<Vec4b>(r, c); //4b和4d有區(qū)別的,b是uchar, d是double
Vec4b &pixel_temp = temp.at<Vec4b>(r, c);
//如果當(dāng)前點(diǎn)的透明度為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;
}
到此這篇關(guān)于OpenCV實(shí)現(xiàn)更改圖片顏色功能的文章就介紹到這了,更多相關(guān)OpenCV更改圖片顏色內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用C++單例模式實(shí)現(xiàn)高性能配置管理器
這篇文章主要為大家詳細(xì)介紹了如何利用C++單例模式實(shí)現(xiàn)高性能配置管理器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-04-04
剖析C語(yǔ)言關(guān)鍵字之void,const,return
這篇文章主要為大家介紹了C語(yǔ)言關(guān)鍵字之void,const,return,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01
C/C++表格組件Qt?TableWidget應(yīng)用詳解
本文詳細(xì)講解了C/C++中使用列表框組件Qt?TableWidget的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
C++高性能服務(wù)器框架之協(xié)程調(diào)度模塊
這篇文章主要介紹了C++高性能服務(wù)器框架中的協(xié)程調(diào)度模塊,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-06-06
c++ 標(biāo)準(zhǔn)庫(kù)多線程問(wèn)題小結(jié)
C++11 引入了<thread>庫(kù),使得多線程編程更加方便,以下是一些基本概念和示例,幫助你理解如何在 C++ 中進(jìn)行多線程編程,這篇文章主要介紹了c++ 標(biāo)準(zhǔn)庫(kù)多線程,需要的朋友可以參考下2025-03-03
詳解利用C語(yǔ)言如何實(shí)現(xiàn)簡(jiǎn)單的內(nèi)存池
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言如何實(shí)現(xiàn)簡(jiǎn)單的內(nèi)存池的相關(guān)資料,設(shè)計(jì)內(nèi)存池的目標(biāo)是為了保證服務(wù)器長(zhǎng)時(shí)間高效的運(yùn)行,通過(guò)對(duì)申請(qǐng)空間小而申請(qǐng)頻繁的對(duì)象進(jìn)行有效管理,減少內(nèi)存碎片的產(chǎn)生,合理分配管理用戶內(nèi)存,需要的朋友可以參考下2021-08-08
C語(yǔ)言題解Leetcode56合并區(qū)間實(shí)例
這篇文章主要為大家介紹了C語(yǔ)言題解Leetcode56合并區(qū)間實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

