OpenCV調試筆記——讀取圖片存入Mat_變量,下次提取時變灰色條紋圖的問題

在OpenCV中,爲了避免各種內存錯誤,使用Mat時,常自己指定好類型,即寫作 Mat_。使用Mat_對imread讀入的圖像數據存儲,因爲OpenCV裏Mat_這種類型只存儲8位的圖片,若所讀圖不是CV_8U類型的,存儲時圖片會被強制轉化爲CV_8U類型,再用imshow展示出來的效果就是有灰色條紋的圖了。

原圖

0

有條紋的圖

	Mat temp = imread("F:/baby.png"); //載入圖像到Mat 
	Mat_<uchar> mat = temp;
	imshow("有條紋的圖", mat);

1

無條紋的圖

所以,如果非要使用Mat_的話,再加一句cvtColor(temp,temp,CV_RGBA2GRAY);同時,若圖像是彩色的,也會轉化爲灰度圖,注意不要用CV_RGBA2RGB,因爲存儲的爲8位單通道圖即單色灰度圖,必須用CV_RGBA2GRAY才能真正順利轉換,消除白色豎條。

	Mat temp = imread("F:/baby.jpg"); //載入圖像到Mat 
	cvtColor(temp,temp,CV_RGBA2GRAY);	//若不加此句會使圖片被存儲爲<uchar>時強制轉換爲帶豎條的灰圖
	Mat_<uchar> mat = temp;
	imshow("無條紋的圖", mat);

2

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