目的
OpenCV是一個跨平臺的庫,使用它我們可以開發實時的計算機視覺應用程序。 它主要集中在圖像處理,視頻采集和分析,包括人臉檢測和物體檢測等功能。
數字圖像在計算機中是以矩陣形式存儲的,矩陣中的每一個元素都描述一定的圖像信息,如亮度、顏色等等。
數字圖像處理就是通過一系列操作從矩陣數據中提取更深層次信息的過程。
分析
以下通過一個例子,展示一幅最簡單的圖像,從而更形象的感覺數字圖像。
//顯示最簡單的圖片:
void showSimpleImage()
{//CV_8UC3就是8位無符號整數,3通道,RGB的顏色模式cv::Mat image(10, 10, CV_8UC3);//遍歷圖像的每個像素for (int x = 0; x < image.rows; ++x){for (int y = 0; y < image.cols; ++y){// 獲取像素的指針cv::Vec3b& pixel = image.at<cv::Vec3b>(x, y);// 為BGR通道分別賦值pixel[0] = 255; // 藍色通道 (B)pixel[1] = 0; // 綠色通道 (G)pixel[2] = 0; // 紅色通道 (R)}}//最左上角的點為 紅色image.at<cv::Vec3b>(0, 0)[0] = 0;image.at<cv::Vec3b>(0, 0)[1] = 0;image.at<cv::Vec3b>(0, 0)[2] = 255;printf("image.type=%d\n", image.type());// 顯示圖像cv::imshow("imageOrigin", image);cv::imwrite("imageOrigin.bmp", image);
}
運行情況:
看不太清楚,整體是藍色,但在左上角是紅色
看保存后圖片,就是imageOrigin.bmp:
放大之后,是這樣的:
可以看到左上角的紅色方框,那就是我們設置的紅色的像素,可以看得出,像素是一個正方形。
結論
其實上圖的在內存的存儲應該是這樣的:
就是一個二維數組,因為數據是三維的,所以用一行的三個數據表示一個元素。
一個元素就是一個像素,這一個元素的三個數據,就描述了這個像素的情況。
這也揭開了像素的神秘面紗。
數字圖像的本質就是二維數組。
具體代碼:
https://download.csdn.net/download/maokexu123/88862864