图像处理小结2

1.

CvvImage类在opencv2.2之后已经被删掉了。

重回opencv1.0怀抱。

2.

GetClientRect(); //获得client区域
GetWindowRect(); //获取window区域
ScreenToClient(); //window区域向客户区域坐标转换

GetClientRect()获得的区域是自己的框,得到的rect的left,top必然为0
而GetWindowRect();获得的区域包括位置,是真个屏幕的位置。

获得控件在客户区的相对坐标的正确方法:
CRect rt;
GetWindowRect(&rt); //获得window区域
ScreenToClient(&rt); //转到client
3.

图片加载到控件上会改变尺寸,不能按照之前的图像尺寸进行画线等操作,否则会出现偏差。

可以以控件本身的尺寸进行lineto和moveto操作。

 CDC *pDC = GetDlgItem(IDC_STATIC_PIC)->GetDC();//由控件ID获得控件句柄,再由控件句柄获得显示控件的DC
   HDC hDC = pDC->GetSafeHdc();//由控件的DC获取 HDC(DC的句柄) 来进行绘图操作

   CPoint P1;
   CPoint P2;
   P1.x=point1.x;
   P1.y=point1.y;
   P2.x=point2.x;
   P2.y=point1.y;
   CvScalar color=CV_RGB(0,255,0);      
   pDC->MoveTo(P1);
   pDC->LineTo(P2);

4.将之前框住的部分copy到另外一个图片控件上单独显示.

 计算出原图像和控件之间的长宽比例。

 将控件上的坐标除以相应的比例进行像素复制。

 需要注意的是,vc6.0里的控件和图像的起始位置都在左上角。

 double bili_x=(DOUBLE)rect.right/(double)img->width;//获得x方向的伸缩比例
 double bili_y=(DOUBLE)rect.bottom/(DOUBLE)img->height;//获得y方向的伸缩比例
 CvSize size;//获得实际抠图尺寸
 size.height=(int)((double)(point2.y-point1.y)/bili_y);
 size.width=(int)((double)(point2.x-point1.x)/bili_x);

 img4=cvCreateImage(size, img->depth, img->nChannels);//创建新图像,新图像赋值

 img4->imageData[(i)*img4->widthStep+(j)*img4->nChannels+k]=img->imageData[(int)(i+(point1.y)/bili_y)*img->widthStep+(int)(j+(point1.x)/bili_x)*img->nChannels+k];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值