1. 程式人生 > 其它 >opencv中ptr的用法及用cout輸出對應指標變數的值

opencv中ptr的用法及用cout輸出對應指標變數的值

技術標籤:OPENCVopencv

的使用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表的範圍中,因此顯示為空。