1. Mat 數(shù)據(jù)存放格式
Mat 和 Matlab 里的數(shù)組格式有點(diǎn)像棒厘,但一般是二維向量。
- 如果是灰度圖下隧,一般存放 <uchar> 類型 (0~255)
- 如果是RGB彩色圖奢人,存放 <Vec3b> 類型
單通道灰度圖數(shù)據(jù)存放格式:
單通道灰度圖數(shù)據(jù)存放格式
多通道的圖像中,每列 并列存放通道數(shù)量的子列淆院,如RGB三通道彩色圖:
RGB三通道彩色圖數(shù)據(jù)存放格式
注意通道的順序反轉(zhuǎn)了:BGR何乎。
2. Mat::at 獲取圖像某點(diǎn)的值
src.at<Vec3b>(i, j) // RGB值
(int) src.at<uchar>(i, j) // 灰度值
// 掃描 RGB 圖像矩陣
void scanImageMatrix(Mat &src) {
for (int i = 0; i < src.rows; ++i) {
for (int j = 0; j < src.cols; ++j) {
cout << src.at<Vec3b>(i, j) << ", ";
}
cout << endl;
}
}
// 掃描灰度圖像矩陣
void scanImageMatrixG(Mat &src) {
for (int i = 0; i < src.rows; ++i) {
for (int j = 0; j < src.cols; ++j) {
cout << setw(3) << (int) src.at<uchar>(i, j) << ", ";
}
cout << endl;
}
}
選擇了 1-5行 5-9列的數(shù)據(jù)
RGB 圖像輸出
[103, 105, 129], [102, 104, 128], [102, 104, 128], [100, 102, 126], [99, 103, 127],
[103, 105, 129], [102, 104, 128], [102, 104, 128], [100, 102, 126], [101, 103, 127],
[103, 105, 129], [102, 104, 128], [102, 104, 128], [100, 102, 126], [101, 103, 127],
[105, 105, 129], [104, 104, 128], [102, 104, 128], [100, 102, 126], [100, 102, 126],
[105, 105, 129], [104, 104, 128], [104, 104, 128], [102, 102, 126], [100, 102, 126],
……
灰度圖像輸出
112, 111, 111, 109, 110,
112, 111, 111, 109, 110,
112, 111, 111, 109, 110,
112, 111, 111, 109, 109,
112, 111, 111, 109, 109,
……
像素點(diǎn)的 灰度值 = ( R + G + B ) / 3
3. 源代碼
#include <cv.h>
#include <highgui.h>
#include <iomanip>
using namespace cv;
using namespace std;
// 掃描圖像矩陣
void scanImageMatrix(Mat &src) {
for (int i = 0; i < src.rows; ++i) {
for (int j = 0; j < src.cols; ++j) {
cout << src.at<Vec3b>(i, j) << ", ";
}
cout << endl;
}
}
// 掃描灰度圖像矩陣
void scanImageMatrixG(Mat &src) {
for (int i = 0; i < src.rows; ++i) {
for (int j = 0; j < src.cols; ++j) {
cout << setw(3) << (int) src.at<uchar>(i, j) << ", ";
}
cout << endl;
}
}
int main() {
Mat src = imread("../pictures/bear.jpeg", 0);
scanImageMatrixG(src);
return 0;
}