首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

对固定区域图像进行处理代码探讨,多谢大家

2012-12-28 
【求助】对固定区域图像进行处理代码探讨,谢谢大家本帖最后由 clkz01 于 2012-11-27 17:07:26 编辑1.已经实

【求助】对固定区域图像进行处理代码探讨,谢谢大家
本帖最后由 clkz01 于 2012-11-27 17:07:26 编辑 1.已经实现鼠标坐标与CCD靶面坐标对应上,左上角为起始点0,0;

2.想根据鼠标点击图像,以点击的位置为中心,处理200*200像素范围内的图像,并计算出所在CCD靶面中的位置。
如:鼠标点击屏幕得到位置(703,241)
计算出200*200的位置
Nrect.left =(point.x-200);      
Nrect.top =(point.y-200);
Nrect.right =(point.x+200);
Nrect.bottom =(point.y+200);

得到:
Nrect.left=503;
Nrect.top=41;
Nrect.right=903;
Nrect.bottom=441;

在回调函数中处理区域代码如下:


with=pDesc->m_pBmpInfo->bmiHeader.biWidth; //取CCD宽度1280
height=pDesc->m_pBmpInfo->bmiHeader.biHeight;//取CCD高度1024

int X_axisN=0;
int Y_axisN=0;
int num=0;
int gao=Nrect.top;
int zuo=Nrect.left;
for(int i=gao;i<gao+400;i++) {
for(int j=zuo;j<zuo+400;j++)
{
if (pDesc->m_pRawBuffer[i*with+j]>180)//
//////////
{//
if(pDesc->m_pRawBuffer[i*with+j]>180||(pDesc->m_pRawBuffer[i*with+j]>180)){
Y_axisN=Y_axisN+i;
X_axisN=X_axisN+j;
num++;
}
else
{
//
pDesc->m_pRawBuffer[i*with+j] = 10;

}

}//
else{
pDesc->m_pRawBuffer[i*with+j] = 10;//
}

}
}

X_axisN=X_axisN/num;

        Y_axisN=Y_axisN/num;

 

    经过测试,图像在200*200区域内,鼠标点击中心与点中心偏一点,显示的灰度值计算有变化,按道理只要在200*200范围内,图像计算出来的数值基本上是一样的,是不是代码没有写对呢?谢谢大家
[最优解释]
怎么不用openCV,里面直接由截图的函数,图像大小可以自己设定
[其他解释]
鼠标坐标是屏幕坐标,要转化为客户区的坐标:
SCreenToClient(point);
[其他解释]
顶上去看看~~~继续思考中
[其他解释]
引用:
怎么不用openCV,里面直接由截图的函数,图像大小可以自己设定

没有用过,想用这种简单的直接达到效果就行,不过代码有问题,改来改去也没有对。郁闷中
[其他解释]
你只计算偏移的时候计算错了. 因为 每一个scan line 都是以 4字节对齐的. 即每行数据都要是DWORD对齐.
而你这里偏移, 

m_pRawBuffer[i*with+j] 这样是错误的:

width 不应该是 像素宽度,而应该是一个行宽, 即上面说的scan line的宽度.
如果是RGB 24位位图, 则 width = ((biWidth * 24 *3) +31 )/32 *4 ;//转换成4字节整数倍.

热点排行