ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenCV 学习笔记(11)像素级别指针操作

2019-07-05 17:01:50  阅读:250  来源: 互联网

标签:11 start int cols 像素 OpenCV alpha img1


 

 

 

//优化两图的连接处,使得拼接自然
void OptimizeSeam(Mat& img1, Mat& trans, Mat& dst)
{	
	int start = MIN(corners.left_top.x, corners.left_bottom.x);//开始位置,即重叠区域的左边界   	
	double processWidth = img1.cols - start;//重叠区域的宽度  	
	int rows = dst.rows;	
	int cols = img1.cols; //注意,是列数*通道数	
	double alpha = 1;//img1中像素的权重  	
	for (int i = 0; i < rows; i++)	
	{		
		uchar* p = img1.ptr<uchar>(i);  //获取第i行的首地址		
		uchar* t = trans.ptr<uchar>(i);		
		uchar* d = dst.ptr<uchar>(i);		
		for (int j = start; j < cols; j++)		
		{		
			//如果遇到图像trans中无像素的黑点,则完全拷贝img1中的数据		
			if (t[j * 3] == 0 && t[j * 3 + 1] == 0 && t[j * 3 + 2] == 0)			{	
			alpha = 1;			}		
			else			{			
			//img1中像素的权重,与当前处理点距重叠区域左边界的距离成正比,实验证明,这种方法确实好  	
			alpha = (processWidth - (j - start)) / processWidth;			} 		
			d[j * 3] = p[j * 3] * alpha + t[j * 3] * (1 - alpha);	
			d[j * 3 + 1] = p[j * 3 + 1] * alpha + t[j * 3 + 1] * (1 - alpha);	
			d[j * 3 + 2] = p[j * 3 + 2] * alpha + t[j * 3 + 2] * (1 - alpha); 	
	    }	
			
	} 
}

  

标签:11,start,int,cols,像素,OpenCV,alpha,img1
来源: https://www.cnblogs.com/kekeoutlook/p/11139378.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有