测试opencv的下列功能:
- 从Mat截取矩形ROI
- 读取Mat中每个点的像素值
#include <opencv2/opencv.hpp>
//#define _MAT_RECT_
#define __MAT_DATA_
int main(){
#ifdef _MAT_RECT_
cv::Mat src, roi;
src = cv::imread("../rgb.png");
cv::Rect box(186,176,104,144);
box &= cv::Rect(0,0,src.cols,src.rows);
roi = src(box);
cv::imshow("roi",roi);
cv::waitKey(10000);
#endif
#ifdef __MAT_DATA_
std::string type[]= {"CV_8U","CV_8S","CV_16U","CV_16S","CV_32S","CV_32F","CV_64F"};
cv::Mat src = cv::imread("../d.png",CV_LOAD_IMAGE_UNCHANGED);
printf("channel : %d\n", src.channels());
printf("type : %s\n", type[src.depth()].c_str() );
printf("depth : %d\n", src.depth());
printf("dim : %d\n", src.dims);
/*printf("CV_8U : %d\n", CV_8U);
printf("CV_8S : %d\n", CV_8S);
printf("CV_16U : %d\n", CV_16U);
printf("CV_16S : %d\n", CV_16S);
printf("CV_32S : %d\n", CV_32S);
printf("CV_32F : %d\n", CV_32F);
printf("CV_64F : %d\n", CV_64F);
printf("CV_8UC2 : %d\n", CV_8UC2);
printf("CV_8SC2 : %d\n", CV_8SC2);
printf("CV_16UC2 : %d\n", CV_16UC2);
printf("CV_16SC2 : %d\n", CV_16SC2);
printf("CV_32SC2 : %d\n", CV_32SC2);
printf("CV_32FC2 : %d\n", CV_32FC2);
printf("CV_64FC2 : %d\n", CV_64FC2);
printf("CV_8UC3 : %d\n", CV_8UC3);
printf("CV_8SC3 : %d\n", CV_8SC3);
printf("CV_16UC3 : %d\n", CV_16UC3);
printf("CV_16SC3 : %d\n", CV_16SC3);
printf("CV_32SC3 : %d\n", CV_32SC3);
printf("CV_32FC3 : %d\n", CV_32FC3);
printf("CV_64FC3 : %d\n", CV_64FC3);*/
int channel = src.channels();
int row = src.rows, col = src.cols * channel;
ushort *p;
if(src.isContinuous()) {
col *= row;
row = 1;
}
for(int i = 0; i < row; ++i){
p = src.ptr<ushort>(i);
for(int j = 0; j < col; ++j)
printf("%d\n",p[j]);
}
#endif
return 0;
}