PhotoShop算法实现--Max/Min运算(十四)

PhotoShop算法实现--Max/Min运算(十四)

[email protected]

http://blog.csdn.net/kezunhai


最大值(Max)合成就是将两幅图像对应像素值中较大的像素值赋给输出图像。

最小值(Min)合成就是将两幅图像对应像素值中较小的像素值赋给输出图像。

算法实现:

// flag = 1最大值, flag = -1 最小值
void PhotoShop::MinMax(Mat& img1, Mat& img2, Mat& dst, int flag)
{
	if ( dst.empty())
		dst.create( img1.rows, img1.cols, img1.type());

	dst = cv::Scalar::all(0);

	int i, j;
	Size size = img1.size();
	int chns = img1.channels();

	//int chns = dst.channels();

	if (img1.isContinuous() && img2.isContinuous() && dst.isContinuous())
	{
		size.width *= size.height; 
		size.height = 1;
	}

	for (  i= 0; i<size.height; ++i)
	{
		const unsigned char* src1 = (const unsigned char*)img1.data + img1.step*i;
		const unsigned char* src2 = (const unsigned char*)img2.data + img2.step*i;
		unsigned char* data = (unsigned char*)dst.data+dst.step*i;
		for (  j=0; j<size.width; ++j)
		{			
			if ( flag == 1)
			{
				data[j*chns] = src1[j*chns] > src2[j*chns]?src1[j*chns]:src2[j*chns];
				data[j*chns+1] =src1[j*chns+1] > src2[j*chns+1]?src1[j*chns+1]:src2[j*chns+1];
				data[j*chns+2] = src1[j*chns+2] > src2[j*chns+2]?src1[j*chns+2]:src2[j*chns+2];
			}
			else
			{
				data[j*chns] = src1[j*chns] > src2[j*chns]?src2[j*chns]:src1[j*chns];
				data[j*chns+1] =src1[j*chns+1] > src2[j*chns+1]?src2[j*chns+1]:src1[j*chns+1];
				data[j*chns+2] = src1[j*chns+2] > src2[j*chns+2]?src2[j*chns+2]:src1[j*chns+2];
			}		
		}
	}	
}
最小值效果:

PhotoShop算法实现--Max/Min运算(十四)_第1张图片
最大值效果:


作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。

你可能感兴趣的:(maxmin运算,PhotoShop算法)