我写了下面的代码:
int _tmain(int argc, _TCHAR* argv[])
{
int vals[]={1,2,3,4,5,6,7,8,9};
CvMat mat = cvMat(3,3,CV_8UC1,vals);
for(int i=0;i<mat.rows;i++)
{
int* ptr = (int*) (mat.data.ptr + i* mat.step);
for(int j=0;j<mat.cols;j++)
{
printf("%d\t",*ptr++);
}
printf("\n");
}
return 0;
}
我得到的输出是:
1 2 3
512 768 1024
196608 262144 327680
矩阵未正确初始化。指针 ptr
指向每一行的开头,递增它会给出相应列中的元素。我的假设正确吗?是不是使用的cvMat构造函数或者元素的访问方式有误?
最佳答案
为什么不使用 cv::Mat
类?
它有一些方便的函数可以更好地处理内存。
对于声明和初始化 cv::Mat
在您的情况下,代码将如下所示:
int main()
{
int vals[] = {1,2,3,4,5,6,7,8,9};
Mat mat = cv::Mat(3, 3, CV_8UC1, vals).clone();
for(int i = 0; i < mat.rows; i++)
{
for(int j = 0; j < mat.cols; j++)
{
cout << mat.at<uchar>(j,i) << " ";
}
cout << endl;
}
return 0;
}
关于c++ - 初始化矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11923094/