我应该初始化一个cv :: Mat

时间:2015-07-03 14:30:26

标签: c++ opencv

我有这段代码:

mapx.create(image.size(), CV_32FC1);
mapy.create(image.size(), CV_32FC1);

此后mapx和mapy中的值是多少?所有数据都是零吗?

这种初始化怎么样:

  cv::Mat  mapx(image.size(), CV_32FC1);

我是否需要明确将每个元素的值设置为零?

如何将每个元素的值设置为-1?

2 个答案:

答案 0 :(得分:2)

create之后的数据应该是未定义的。事实上,你只是在分配内存。

cv::Mat  mapx(image.size(), CV_32FC1);

完全相同
cv::Mat1f mapx(image.size());

cv::Mat mapy;
mapy.create(image.size(), CV_32FC1);

您可以像这样分配一个初始值(例如-1):

cv::Mat1f(images.size(), -1.f);

关于你的主要问题我应该初始化cv :: Mat ,答案是一般你不需要。来自OpenCV doc:

而不是写作:

Mat color;
...
Mat gray(color.rows, color.cols, color.depth());
cvtColor(color, gray, CV_BGR2GRAY);

你可以简单地写一下:

Mat color;
...
Mat gray;
cvtColor(color, gray, CV_BGR2GRAY);

答案 1 :(得分:1)

您可以看到opencv文档:

Mat::zeros
Mat::ones
Mat A = Mat::ones(100, 100, CV_8U)*3; // make 100x100 matrix filled with 3.

http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-zeros

如何将每个元素的值设置为-1?

我认为是这样的:

Mat A = Mat::ones(100, 100, CV_8U)*-1; // make 100x100 matrix filled with -1.