學習OpenCV:濾鏡系列(10)——懷舊色 & 連環畫 & 熔鑄 & 冰凍
【原文:http://blog.csdn.net/yangtrees/article/details/9116337】
==============================================
版權所有:小熊不去實驗室CSDN部落格
==============================================
懷舊色調色原理
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- using namespace cv;
- using namespace std;
- int main()
- {
- Mat src = imread("D:/scene04.jpg",1);
- int width=src.cols;
- int heigh=src.rows;
- RNG rng;
- Mat img(src.size(),CV_8UC3);
- for (int y=0; y<heigh; y++)
- {
- uchar* P0 = src.ptr<uchar>(y);
- uchar* P1 = img.ptr<uchar>(y);
- for (int x=0; x<width; x++)
- {
- float B=P0[3*x];
- float G=P0[3*x+1];
- float R=P0[3*x+2];
- float newB=0.272*R+0.534*G+0.131*B;
- float newG=0.349*R+0.686*G+0.168*B;
- float newR=0.393*R+0.769*G+0.189*B;
- if(newB<0)newB=0;
- if(newB>255)newB=255;
- if(newG<0)newG=0;
- if(newG>255)newG=255;
- if(newR<0)newR=0;
- if(newR>255)newR=255;
- P1[3*x] = (uchar)newB;
- P1[3*x+1] = (uchar)newG;
- P1[3*x+2] = (uchar)newR;
- }
- }
- imshow("懷舊色",img);
- waitKey();
- imwrite("D:/懷舊色.jpg",img);
- }
原圖:
懷舊色:
連環畫原理:
連環畫的效果與影象灰度化後的效果相似,它們都是灰度圖,但連環畫增大了影象的對比度,使整體明暗效果更強.
演算法:
R = |g – b + g + r| * r / 256
G = |b – g + b + r| * r / 256;
B = |b – g + b + r| * g / 256;
- #include <math.h>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- using namespace cv;
- using namespace std;
- int main()
- {
- Mat src = imread("D:/scene04.jpg",1);
- int width=src.cols;
- int heigh=src.rows;
- RNG rng;
- Mat img(src.size(),CV_8UC3);
- for (int y=0; y<heigh; y++)
- {
- uchar* P0 = src.ptr<uchar>(y);
- uchar* P1 = img.ptr<uchar>(y);
- for (int x=0; x<width; x++)
- {
- float B=P0[3*x];
- float G=P0[3*x+1];
- float R=P0[3*x+2];
- float newB=abs(B-G+B+R)*G/256;
- float newG=abs(B-G+B+R)*R/256;
- float newR=abs(G-B+G+R)*R/256;
- if(newB<0)newB=0;
- if(newB>255)newB=255;
- if(newG<0)newG=0;
- if(newG>255)newG=255;
- if(newR<0)newR=0;
- if(newR>255)newR=255;
- P1[3*x] = (uchar)newB;
- P1[3*x+1] = (uchar)newG;
- P1[3*x+2] = (uchar)newR;
- }
- }
- Mat gray;
- cvtColor(img,gray,CV_BGR2GRAY);
- normalize(gray,gray,255,0,CV_MINMAX);
- imshow("連環畫",gray);
- waitKey();
- imwrite("D:/連環畫.jpg",gray);
- }
連環畫效果:
![](https://i.iter01.com/images/5ea6438dabcdc550b06b2356289b48e117ac7836065ebd42b7cd3ed72a1a9754.jpg)
熔鑄演算法
r = r*128/(g+b +1);
g = g*128/(r+b +1);
b = b*128/(g+r +1);
冰凍演算法
r = (r-g-b)*3/2;
g = (g-r-b)*3/2;
b = (b-g-r)*3/2;
- #include <math.h>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- #define MAXSIZE (32768)
- using namespace cv;
- using namespace std;
- void casting(const Mat& src)
- {
- Mat img;
- src.copyTo(img);
- int width=src.cols;
- int heigh=src.rows;
- Mat dst(img.size(),CV_8UC3);
- for (int y=0;y<heigh;y++)
- {
- uchar* imgP=img.ptr<uchar>(y);
- uchar* dstP=dst.ptr<uchar>(y);
- for (int x=0;x<width;x++)
- {
- float b0=imgP[3*x];
- float g0=imgP[3*x+1];
- float r0=imgP[3*x+2];
- float b = b0*255/(g0+r0+1);
- float g = g0*255/(b0+r0+1);
- float r = r0*255/(g0+b0+1);
- r = (r>255 ? 255 : (r<0? 0 : r));
- g = (g>255 ? 255 : (g<0? 0 : g));
- b = (b>255 ? 255 : (b<0? 0 : b));
- dstP[3*x] = (uchar)b;
- dstP[3*x+1] = (uchar)g;
- dstP[3*x+2] = (uchar)r;
- }
- }
- imshow("熔鑄",dst);
- imwrite("D:/img/熔鑄.jpg",dst);
- }
- void freezing(const Mat& src)
- {
- Mat img;
- src.copyTo(img);
- int width=src.cols;
- int heigh=src.rows;
- Mat dst(img.size(),CV_8UC3);
- for (int y=0;y<heigh;y++)
- {
- uchar* imgP=img.ptr<uchar>(y);
- uchar* dstP=dst.ptr<uchar>(y);
- for (int x=0;x<width;x++)
- {
- float b0=imgP[3*x];
- float g0=imgP[3*x+1];
- float r0=imgP[3*x+2];
- float b = (b0-g0-r0)*3/2;
- float g = (g0-b0-r0)*3/2;
- float r = (r0-g0-b0)*3/2;
- r = (r>255 ? 255 : (r<0? -r : r));
- g = (g>255 ? 255 : (g<0? -g : g));
- b = (b>255 ? 255 : (b<0? -b : b));
- // r = (r>255 ? 255 : (r<0? 0 : r));
- // g = (g>255 ? 255 : (g<0? 0 : g));
- // b = (b>255 ? 255 : (b<0? 0 : b));
- dstP[3*x] = (uchar)b;
- dstP[3*x+1] = (uchar)g;
- dstP[3*x+2] = (uchar)r;
- }
- }
- imwrite("D:/img/冰凍.jpg",dst);
- }
- int main()
- {
- Mat src = imread("D:/img/scene04.jpg",1);
- imshow("src",src);
- casting(src);
- freezing(src);
- waitKey();
- }
熔鑄:
冰凍:
![](https://i.iter01.com/images/f2f2859085ae07fde2b8049fd5a4ee6d2144a36949afb3ae35066a9a84dac461.jpg)
相關文章
- Win10顏色濾鏡功能怎麼開啟_開啟win10顏色濾鏡的步驟Win10
- 美顏濾鏡SDK的智慧濾鏡與傳統顏色濾鏡有什麼區別?
- 黑神話畫素版(懷舊服)
- 修圖調色降噪濾鏡_Nik Collection 5 (濾鏡外掛)_中文Nik 5
- Canvas系列之一——濾鏡效果Canvas
- CSS3全覽_動畫+濾鏡CSSS3動畫
- 影像濾鏡藝術----Brannan濾鏡NaN
- 《魔獸世界》懷舊服,我們還會「懷舊」多久?
- ON1 Effects 2023 for Mac(影像濾鏡調色軟體)Mac
- 676款VSCO全濾鏡一鍵調色外掛
- ON1 Effects 2023 Mac(影像濾鏡調色軟體)Mac
- 油畫濾鏡軟體:JixiPix Artista Impresso Pro for MacMac
- 準備Python環境學習OpenCV的使用PythonOpenCV
- DarkMode(4):css濾鏡 顏色反轉實現深色模式CSS模式
- JavaCV 視訊濾鏡(LOGO、滾動字幕、畫中畫、NxN宮格)JavaGo
- OpenCV計算機視覺學習(10)——影像變換(傅立葉變換,高通濾波,低通濾波)OpenCV計算機視覺
- 【opencv學習筆記】001之opencv配置(win10+VS2015+OpenCV3.1.0)OpenCV筆記Win10
- opencv 學習OpenCV
- 魔獸懷舊服上線滿月,懷舊文化正在遊戲界蔓延?遊戲
- OpenCV計算機視覺學習(4)——影像平滑處理(均值濾波,高斯濾波,中值濾波,雙邊濾波)OpenCV計算機視覺
- CSS濾鏡(filter)CSSFilter
- SVG <filter> 濾鏡SVGFilter
- 電鏡的成像原理-冷凍電鏡成像技術1
- 【opencv實戰】哈哈鏡OpenCV
- ON1 Effects 2023照片濾鏡調色處理軟體Mac/WindowsMacWindows
- win10藍芽連線後藍色畫面怎麼辦_win10 1909 藍芽連線一直藍色畫面解決方法Win10藍芽
- 怎樣的懷舊才能滿足老玩家的情懷?
- 【親測有效】mac電腦也能玩魔獸世界懷舊版(wow經典懷舊版)Mac
- Inti Creates的懷舊之魂(下):復活《惡魔城》的畫素精神
- CTF學習(21)MISC(九連環)
- OpenCV 線性濾波OpenCV
- 美顏SDK濾鏡功能有哪些常用的濾鏡演算法演算法
- 熔心重鑄,唯愛蘇生,靈魂潮汐「熔心測試」1.14日開啟
- CSS畫冰墩墩~CSS
- 手繪畫效果濾鏡軟體:Snap Art 4 for mac 中文版Mac
- 支援M1:Alien Skin Snap Art 4 PS繪畫效果濾鏡
- 學習OpenCV:骨架提取OpenCV
- 學習OpenCV:hu矩OpenCV
- 半小時輕鬆玩轉WebGL濾鏡技術系列(一)Web