我试图获得N * N矩阵。要做到这一点,我使用下面的代码,但始终打印一个值。任何想要采用正确的矩阵值的想法。
我使用imread函数检查了目标mat,该函数不为null。的对价。但是在printf中出现 \ 377 值,其中int count = 0;
Size s=destination.size();
int count=0;
for(int i=0 ;i<s.height; i++)
{
for (int j=0; j<s.width; j++) {
unsigned char* byte = destination.ptr<unsigned char>(i,j);
count++;
printf("valeue %s ",byte);
printf("\n");
}
}
输出
valeue \377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377 .......
答案 0 :(得分:1)
ptr接受行号码作为参数。因此,您可以通过调用每个i
(外部内部循环)上的指针来获取指向每行的起始元素的指针。
然后您需要%d
中的%u
(或printf
)(或者您可以使用cout
)。检查以下代码:
#include <opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
int N = 10;
// Init matrix
Mat destination(N, N, CV_8UC1);
randu(destination, Scalar(0), Scalar(255));
Size s = destination.size();
int count = 0;
for (int i = 0; i<s.height; i++)
{
unsigned char* pByte = destination.ptr<unsigned char>(i);
for (int j = 0; j<s.width; j++) {
count++;
printf("value %d ", pByte[j]);
printf("\n");
//cout << "value " << int(pByte[j]) << endl;
}
}
return(0);
}
您可以在my other answer其他方法中查看Mat
中特定位置的值。
答案 1 :(得分:0)
要打印Mat值,您只需要迭代Mat。
以下是一段代码:
Mat in = imread("image.bmp",CV_LOAD_IMAGE_GRAYSCALE);
if(in.empty())
{
puts("Cannot open image!");
return -1;
}
//Print the values
for(int i=0;i<in.rows;i++)
{
for(int j=0;j<in.cols;j++)
{
cout<<in.at<uchar>(i,j)<<" ";
}
cout<<endl;
}
这里基本上我正在加载图像,检查图像是否为空,然后打印值。
由于我的图像是灰度图像,我使用了in.at<uchar>(i,j)
uchar
表示unsigned char
。