opencv初體驗-圖片濾鏡效果


安裝完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);
}



編譯時須要注意一下,須要加上`pkg-config opencv --libs --cflags opencv`

例如: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

相關文章
相關標籤/搜索