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