opencv中ptr的用法及用cout輸出對應指標變數的值
阿新 • • 發佈:2020-12-27
的使用cout輸出uchar資料時無法輸出對應的值,可使用int強制型別轉換或使用printf輸出。
*secondRow與secondRow[0]相同,都是指向陣列第一個元素。
#include <opencv2/opencv.hpp> #include<iostream> int main(int argc, char** argv) { cv::Mat src = cv::imread("D:/cv_img_test/dog.jpg"); if (src.empty()) { std::cout << "無法載入影象" << std::endl; return - 1; } cv::namedWindow("Input Window"); cv::imshow("Input Window", src); int rows = src.rows; int cols = src.cols; std::cout << "圖片長為:" << cols << std::endl << "圖片寬為" << rows << std::endl; int channals = src.channels(); std::cout << "圖片通道數為:" << channals << std::endl; const uchar* firstRow = src.ptr<uchar>(0); const uchar* secondRow = src.ptr<uchar>(1); //secondRow為指標,也是陣列的頭部 std::cout << "*firstRow輸出的結果:"<<*firstRow << std::endl; //此處由於cout會自動選擇資料型別,在使用cout將資料打印出來的時候,char和unsigned char資料打印出來的是其相應的ASCII碼。 std::cout << "圖片第一行像數值為:" << (int)*firstRow << std::endl; //強制型別轉換後輸出對應變數值 std::cout << "圖片第二行像數值為:" << (int)*secondRow << std::endl;//*secondRow與secondRow[0]相同 std::cout << "圖片第二行第一列像數值為:" << (int)secondRow[0] << std::endl;//讀取對應位置畫素值 std::cout << "圖片第二行第二列像數值為:" << (int)secondRow[1] << std::endl; printf("圖片第二行像數值為:%d\n",*secondRow); //%d表示輸出十進位制整型資料,因此與cout中強制型別轉換的作用一樣 cv::waitKey(0); return 0; }
執行結果為:
由於*firstRow輸出的ASCII碼,資料不要在ASCII表的範圍中,因此顯示為空。