vc MFC在opencv的Mat图像上显示中文:Mat转位MFC的CImage,画图写文字,再转回Mat

// Step 1 创建CImage获取dc
int iImgW = matImgSized.cols;
int iImgH = matImgSized.rows;
int iChannel = matImgSized.channels();
bool bCon = matImgSized.isContinuous();
CImage image;
image.Create(iImgW, iImgH, iChannel *8);  // 24位BGR格式
cv::Mat matBGR;
cv::cvtColor(matImgSized, matBGR, cv::COLOR_BGR2RGB);  // OpenCV默认BGR,MFC需要RGB
//memcpy(image.GetBits(), matBGR.data, iImgW * iImgH * 3);
BYTE* pBits = (BYTE*)image.GetBits();
int pitch = image.GetPitch();
for (int y = 0; y < iImgH; y++) 
{
	memcpy(pBits + y * pitch, matBGR.data + y * matBGR.step, iImgW * 3);
}
// Step 2: 创建内存DC并绘制文字
CDC dc;
dc.CreateCompatibleDC(NULL);
CBitmap* pOldBitmap = dc.SelectObject(CBitmap::FromHandle(image));

// 在dc上画图或者写文字

// Step 3: 将 CImage 数据写回 cv::Mat
for (int y = 0; y < iImgH; y++)
	memcpy(matBGR.data + y * matBGR.step,pBits + y * pitch,  iImgW * 3);
cv::cvtColor(matBGR, matImgSized, cv::COLOR_RGB2BGR);  // 转换回BGR格式
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐