鼬爱你 2016-10-24 04:13 采纳率: 37.5%
浏览 5325

我用VS2015+MFC+Opencv3.0进行图像操作再显示到picture控件上出现了一些问题

这是点击按钮的响应函数
void CCrazyDlg::OnBnClickedOk()
{
CString FilePath;
CFileDialog FileDlg(TRUE);
if (IDOK == FileDlg.DoModal())
{
//获取FileOpen对话框返回的路径名
FilePath = FileDlg.GetPathName();
//GetPathName返回的是CString类型,要经过转换为string类型才能使用imread打开图片
//std::string pathName(FilePath.GetBuffer());
std::string tempName = (LPCSTR)CStringA(FilePath);
const char*pathName = tempName.c_str();
Mat bin;
//读取图片
Mat im = imread(pathName); // 读图,并转化为灰度图
threshold(im, bin, 120, 255, CV_THRESH_BINARY | THRESH_OTSU);

    //显示图片 
    ShowMat(bin, GetDlgItem(IDC_SHOW)->GetSafeHwnd());
}

}
这是ShowMat 函数
int CCrazyDlg::ShowMat(Mat img, HWND hWndDisplay)
{
if (img.channels() {
return -1;
}
//构造将要显示的Mat版本图片
RECT rect;
::GetClientRect(hWndDisplay, &rect);
Mat imgShow(abs(rect.top - rect.bottom), abs(rect.right - rect.left), CV_8UC3);
resize(img, imgShow, imgShow.size());
//在控件上显示要用到的CImage类图片
ATL::CImage CI;
int w = imgShow.cols;//宽
int h = imgShow.rows;//高
int channels = imgShow.channels();//通道数
CI.Create(w, h, 8 * channels); //CI像素的复制
uchar *pS; uchar *pImg = (uchar *)CI.GetBits();//得到CImage数据区地址
int step = CI.GetPitch();
for (int i = 0; i {
pS = imgShow.ptr(i);
for (int j = 0; j<w; j++)
{
for (int k = 0; k<3; k++)
*(pImg + i*step + j * 3 + k) = pS[j * 3 + k]; //注意到这里的step不用乘以3
}
}
//在控件显示图片
HDC dc;
dc = ::GetDC(hWndDisplay);
CI.Draw(dc, 0, 0);
::ReleaseDC(hWndDisplay, dc);
CI.Destroy();
return 0;
}
我调试到threshold()那里就停止运行,错误信息是0x7734C42D 处(位于 Crazy.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0039DFB4 处。求解释,我困扰了好久了

  • 写回答

2条回答 默认 最新

  • lx624909677 2016-10-24 06:06
    关注

    im看下他的大小是多少,在threshold(im, bin, 120, 255, CV_THRESH_BINARY | THRESH_OTSU);这行添加个断点

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记