MFC中OpenCV坐标问题

在MFC中的中,可以调用DrawToHDC将IplImage画在图像控件中

void CGroundStation_OpenCVDlg::DrawLocalToHDC(void) { CDC *pDC =GetDlgItem(IDC_STATIC_LOCAL_MAP)->GetDC(); HDC hDC= pDC->GetSafeHdc(); CRect rect; GetDlgItem(IDC_STATIC_LOCAL_MAP)->GetClientRect(&rect); CvvImage cimg; cimg.CopyOf(m_LocalMapImage); cimg.DrawToHDC(hDC,&rect); ReleaseDC(pDC); }

我想通过鼠标点击图像控件取点,获取点相对于图像控件左上角的坐标,然后在图像中画出来,注意图像控件的notify设置为true

dialog类中声明

public: CString temp; public: // 局部地图相对于对话框的矩形区域 CRect m_RectLocalMap; public: IplImage* m_LocalImage; public: void DrawLocalToHDC(void);

1.在OnInitDialog中

// TODO: 在此添加额外的初始化代码 //获取图像控件相对于对话框左上角的矩形区域 GetDlgItem(IDC_STATIC_LOCAL_MAP)->GetWindowRect(& m_RectLocalMap); ScreenToClient(& m_RectLocalMap); //生成合适大小的图像 m_LocalImage = cvCreateImage(cvSize(m_RectLocalMap.right - m_RectLocalMap.left, m_RectLocalMap.bottom - m_RectLocalMap.top), IPL_DEPTH_8U, 3);

2.为图像控件添加STN_CLICKED消息响应

void CMap_TestDlg::OnStnClickedStaticLocalMap() { // TODO: 在此添加控件通知处理程序代码 // MessageBox(_T("clicked")); //获取鼠标点 CPoint point; GetCursorPos(&point); ScreenToClient(&point); this->temp.Format(_T("curposition x: %d y: %d"), point.x-m_RectLocalMap.left, point.y-m_RectLocalMap.top); //MessageBox(temp); //画出鼠标点 cvCircle(m_LocalImage, cvPoint(point.x-m_RectLocalMap.left, point.y-m_RectLocalMap.top), 5, cvScalar(0,0,255), -1); DrawLocalToHDC(); }

这样就可以实现了

你可能感兴趣的:(mfc)