MFC 图像处理 code
时间: 2024-12-27 20:14:02 浏览: 3
### MFC 图像处理 示例代码
#### 使用 OpenCV 和 MFC 显示图像并添加文字
为了展示如何在 MFC 应用程序中集成 OpenCV 进行图像处理,下面提供了一个简单的例子。该示例展示了如何加载一张图片,在其上添加一些文本,并最终将其显示在一个对话框窗口内。
```cpp
// 在头文件 (.h) 中声明成员变量和消息映射函数
class CImageProcessingDlg : public CDialogEx {
public:
Mat img; // OpenCV 的矩阵用于存储图像数据
protected:
virtual void DoDataExchange(CDataExchange* pDX);
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};
// 实现文件 (.cpp)
void CImageProcessingDlg::DoDataExchange(CDataExchange* pDX){
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CImageProcessingDlg, CDialogEx)
ON_WM_PAINT()
END_MESSAGE_MAP()
BOOL CImageProcessingDlg::OnInitDialog(){
CDialogEx::OnInitDialog();
// 加载图像
img = imread("example.bmp");
if(img.empty()){
MessageBox(_T("无法打开或找到图像"));
return FALSE;
}
// 向图像添加文本
putText(img, "Hello World", Point(50, 50), FONT_HERSHEY_SIMPLEX, 1, Scalar(255, 0, 0), 2);
Invalidate(); // 请求重绘客户区
return TRUE;
}
void CImageProcessingDlg::OnPaint(){
CPaintDC dc(this);
CDC memDC;
BITMAPINFO bmi = { sizeof(BITMAPINFOHEADER),
img.cols,
-img.rows,
1,
32,
BI_RGB,
(DWORD)(img.step * img.rows),
0, 0, NULL, NULL };
HBITMAP hbm = CreateDIBSection(dc.GetSafeHdc(), &bmi, DIB_RGB_COLORS, (void**)&img.data, NULL, 0);
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(hbm);
dc.BitBlt(0, 0, img.cols, img.rows, &memDC, 0, 0, SRCCOPY);
}
```
上述代码片段实现了基本的功能:初始化对话框时加载指定路径下的 BMP 文件作为背景图;利用 `cv::putText` 函数向图像添加字符串 “Hello World”,位置位于坐标 `(50, 50)` 处,字体大小为默认值,颜色设置成蓝色[^3]。
阅读全文