2013-07-19 42 views
1

我试图打印从CV_8UC4类型的图像文件中输入的矩阵值。我的代码写在下面。我的问题是我得到的价值只有48和255,而我期待值2和1或某些东西。有谁知道为什么?我认为我打印错误的方式。有没有其他方法可以打印CV_8UC4的值。 我的代码是:OpenCV中CV_8UC4矩阵类型的打印值

CvMat* m1 = cvLoadImageM(argv[1], CV_LOAD_IMAGE_UNCHANGED); // load the matrix from an image file 
cv::Mat m1cpp(m1); 
int type = m1cpp.type(); 
printf(" type is %d ", type); 

switch(type) { 

case 24: 
    printf("\n --> Matrix type is CV_8U \n"); 

    for(size_t i = 0; i < m1cpp.rows; i++) { 
    for(size_t j = 0; j < m1cpp.cols; j++) { 
     printf(" %d ", m1cpp.at<uchar>(i,j)); 
    } printf("\n"); 
    } 
break; 


case 25: 
    printf("\n --> Matrix type is CV_8S \n"); 

    for(size_t i = 0; i < m1cpp.rows; i++) { 
    for(size_t j = 0; j < m1cpp.cols; j++) { 
     printf(" %d ", m1cpp.at<schar>(i,j)); 
    } printf("\n"); 
    } 
break; 


case 18: 
    printf("\n --> Matrix type is CV_16U \n"); 

    for(size_t i = 0; i < m1cpp.rows; i++) { 
    for(size_t j = 0; j < m1cpp.cols; j++) { 
     printf(" %d ", m1cpp.at<ushort>(i,j)); 
    } printf("\n"); 
    } 
break; 


case 27: 
    printf("\n --> Matrix type is CV_16S \n"); 

    for(size_t i = 0; i < m1cpp.rows; i++) { 
    for(size_t j = 0; j < m1cpp.cols; j++) { 
     printf(" %d ", m1cpp.at<short>(i,j)); 
    } printf("\n"); 
    } 
break; 


case 28: 
    printf("\n --> Matrix type is CV_32S \n"); 

    for(size_t i = 0; i < m1cpp.rows; i++) { 
    for(size_t j = 0; j < m1cpp.cols; j++) { 
     printf(" %d ", m1cpp.at<int>(i,j)); 
    } printf("\n"); 
    } 
break; 

case 29: 
    printf("\n --> Matrix type is CV_32F \n"); 

    for(size_t i = 0; i < m1cpp.rows; i++) { 
    for(size_t j = 0; j < m1cpp.cols; j++) { 
     printf(" %.3f ", m1cpp.at<float>(i,j)); 
    } printf("\n"); 
    } 
break; 


case 30: 
    printf("\n --> Matrix type is CV_64F \n"); 

    for(size_t i = 0; i < m1cpp.rows; i++) { 
    for(size_t j = 0; j < m1cpp.cols; j++) { 
     printf(" %.3f ", m1cpp.at<double>(i,j)); 
    } printf("\n"); 
    } 
    break; 

    default: 
printf("\n --> Matrix type not found \n"); 

} 

我的情况下,即将24,我越来越有线值48和255有一些其他的方法来打印CV_8UC4值?

回答

5

访问您CV_8UC4矩阵正确:

image.at<cv::Vec4b>(j,i)[0]; 
    image.at<cv::Vec4b>(j,i)[1]; 
    image.at<cv::Vec4b>(j,i)[2]; 
    image.at<cv::Vec4b>(j,i)[3]; 
+0

是的,我试图在4个不同的报表打印值,但仍然只得到48和255的值 – user227666