安裝完opencv後,下面就要嘗試一下。 html
首先感謝一下前人的經驗,我參考了http://blog.csdn.net/yangtrees/article/details/9116337的代碼, 工具
稍做修改,將其變成一個小工具,可將圖片加「懷舊色」濾鏡保存輸出。 測試
不說廢話,直接上代碼。 ui
#include <opencv/cv.h> #include <opencv/highgui.h> using namespace cv; using namespace std; int main(int argc, char ** argv) { // input args check if(argc < 3){ printf("please input args.\n"); printf("e.g. : ./test infilepath outfilepath \n"); return 0; } char * input = argv[1]; char * output = argv[2]; printf("input: %s, output: %s\n", input, output); Mat src = imread(input, 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("out",img); waitKey(); imwrite(output,img); }
例如:g++ -o test opencvtest.cpp `pkg-config opencv --libs --cflags opencv` spa
OK,編譯正常。 .net
從網上下個圖片,作個測試。 unix
看下效果,還不錯。 code
原圖: htm
處理後: blog
我的博客同步:http://blog.chinaunix.net/uid-24567872-id-3998957.html