covertTo 和 setTo無法轉換mat像素類型

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章