sobel

/**************************************************
*   Sobel算子边缘检测
*   parameter: srcData - 原始图像数据指针
*              dstData - 存储处理后的图像
*              lWidth,lHeight - 图像的宽和高
*              dLineBites - 单行图像的字节数(4的倍数)
**************************************************/
Void TEncSearch::SobelEdgeDetect(Pel * srcData,Pel * dstData,int lWidth,int lHeight,int dLineBites)
{
	int KERNEL[4][9] = {{-1,0,1,-2,0,2,-1,0,1},
	{-1,-2,-1,0,0,0,1,2,1},
	{-2,-1,0,-1,0,1,0,1,2},
	{0,-1,-2,1,0,-1,2,1,0}};
	int i,j,k,kernel_sum,total_sum = 0,nMax = 0;
	Pel * pTmpSrcData = new Pel[lHeight*lWidth]; 
	Pel * pTmpDstData = new Pel[lHeight*lWidth]; 
	memcpy(pTmpDstData,srcData,lHeight*lWidth*2);
	//for(int j=0;j<lHeight;j++)
	//{
	//	for(int i=0;i<lWidth;i++)
	//		cout<<pTmpDstData[j*lWidth+i]<<"\t";
	//	cout<<endl;
	//}
	for (i = 1;i < lHeight - 1;i++)
	{
		pTmpSrcData = srcData + dLineBites * i;
		//pTmpDstData = dstData + dLineBites * i;
		//pTmpDstData = pTmpDstData + dLineBites * i;
		for (j = 1;j < lWidth - 1; ++j)
		{
			total_sum = 0;
			nMax = 0;
			for (k = 0;k < 4;k++)
			{
				kernel_sum = *(pTmpSrcData + j - dLineBites - 1) * KERNEL[k][0]+
					*(pTmpSrcData + j - dLineBites ) * KERNEL[k][1]+
					*(pTmpSrcData + j - dLineBites + 1) * KERNEL[k][2]+
					*(pTmpSrcData + j - 1) * KERNEL[k][3]+
					*(pTmpSrcData + j ) * KERNEL[k][4]+
					*(pTmpSrcData + j + 1) * KERNEL[k][5]+
					*(pTmpSrcData + j + dLineBites - 1) * KERNEL[k][6]+
					*(pTmpSrcData + j + dLineBites ) * KERNEL[k][7]+
					*(pTmpSrcData + j + dLineBites + 1) * KERNEL[k][8];
				kernel_sum = abs(kernel_sum);
				//total_sum += abs(kernel_sum);
				if(nMax < kernel_sum)
					nMax = kernel_sum;

			}
			if(nMax > 255)
				nMax = 255;
			*(pTmpDstData + dLineBites * i + j) = (Pel)nMax;
			//*(pTmpDstData + j) = (Pel)nMax;
		}
	}
	for(int j=0;j<lHeight;j++)
	{
		for(int i=0;i<lWidth;i++)
			cout<<pTmpDstData[j*lWidth+i]<<"\t";
		cout<<endl;
	}
	memcpy(dstData,pTmpDstData,lHeight*lWidth*2);
	pTmpDstData = NULL;
	pTmpSrcData = NULL;
	delete pTmpDstData;
	delete pTmpSrcData;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值