1.原始问题:
src = imread("**.jpg"); GpuMat srcImg(src); GpuMat hist; gpu::calcHist(srcImg,hist)
使用imread载入图像后,
再导入到GpuMat中:
用calcHist处理srcImg时候出现了内存异常。
后来发现是calcHist只能处理CV_8UC1像素类型的图像,但是src的像素不是CV_8UC1。
再尝试使用covertTo和setTo来转换src的像素类型,但是没用成功。
经过调试发现,src的通道是3个。
然后代码修改成以下以后成功:
src = imread("**.jpg",CV_LOAD_IMAGE_GRAYSCALE); if(src.type != CV_8UC1) { src.covertTo(src,CV_8UC1); } GpuMat srcImg(src); GpuMat hist; gpu::calcHist(srcImg,hist)
在imread的时候,src存储的就是一张单通道图像。
再使用covertTo转换src的像素类型。
参考:
http://blog.csdn.net/tcm_zhangpeng/article/details/39084103
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。