圖像濾鏡效果

前段時間在一個公司做兼職,做的就是濾鏡的效果,起初我並沒有太怎麼思考,想着很簡單的事情,所以一直拖着沒有完成,結果到了快交任務的時候有點着急了,因爲我調了兩天的效果,發現事情根本不是我想象中的那樣簡單,並且也參考了很多文章,始終沒有找到我的理想的效果方法。最後在公司兩位美工同事的幫助下順利完成了任務,最重要的是我找到了一種非常好的方法!老規矩先上代碼,再講原理,其實原理灰常簡單!


#include <opencv/cv.h>
#include <opencv2/contrib/contrib.hpp>
#include <opencv/highgui.h>
float layerOverlay(float A, float B)//疊加
{
    return (A < 128) ? (2 * A * B / 255) : (255 - 2 * (255 - A) * (255 - B) / 255);
}

float layerMultiply(float A,float B)//正片疊底
{
	return A*B/255;
}
Mat FanYNew(Mat src,Mat src2)//泛黃
{
	int width = src.cols;
	int height = src.rows;
	int width1 = src2.cols;
	int height1 = src2.rows;
	std::cout<<width<<std::endl<<width1<<std::endl<<height<<std::endl<<height1<<std::endl;
	Mat dst(src.size(),CV_8UC3);
	for(int i=0;i<height;i++)
	{
		for(int j=0;j<width;j++)
		{
			dst.ptr<uchar>(i)[3*j] = layerMultiply(src.ptr<uchar>(i)[3*j],src2.ptr<uchar>(i)[3*(j)]);
			dst.ptr<uchar>(i)[3*j+1] = layerMultiply(src.ptr<uchar>(i)[3*j+1],src2.ptr<uchar>(i)[3*(j)+1]);
			dst.ptr<uchar>(i)[3*j+2] = layerMultiply(src.ptr<uchar>(i)[3*j+2],src2.ptr<uchar>(i)[3*(j)+2]);
			
		}
	}
	return dst;
}
Mat cold(Mat src,Mat src2)//冷色調
{
	int width = src.cols;
	int height = src.rows;
	int width1 = src2.cols;
	int height1 = src2.rows;
	std::cout<<width<<std::endl<<width1<<std::endl<<height<<std::endl<<height1<<std::endl;
	Mat dst(src.size(),CV_8UC3);
	for(int i=0;i<height;i++)
	{
		for(int j=0;j<width;j++)
		{
			dst.ptr<uchar>(i)[3*j] = layerOverlay(src.ptr<uchar>(i)[3*j],src2.ptr<uchar>(i)[3*(j)]);
			dst.ptr<uchar>(i)[3*j+1] = layerOverlay(src.ptr<uchar>(i)[3*j+1],src2.ptr<uchar>(i)[3*(j)+1]);
			dst.ptr<uchar>(i)[3*j+2] = layerOverlay(src.ptr<uchar>(i)[3*j+2],src2.ptr<uchar>(i)[3*(j)+2]);
			
		}
	}
	return dst;
}
原圖及效果圖:


冷色調和泛黃的漸變圖:


這就是我所說的好方法中最終要的一環,漸變圖。起初我不知道叫什麼,和我的兩個美工的朋友弄了一天,主要他們有事情忙,總是擠出時間來幫我。

圖像的濾鏡效果,雖然大體上的效果稱呼不多,比如:黑白,懷舊,冷色調,暖色調等等,但是要想調出自己心中的濾鏡效果着實挺費勁的,因此,我採用了仿照Photoshop的方式,將兩張圖片用photoshop的方法,比如正片疊底,或者疊加等等方法,一共大致16種,反正我只寫了16種。所以總結,美工和程序員實在是不可分家呀!有沒有!

發佈了33 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章