【发布时间】:2015-11-24 02:06:11
【问题描述】:
我的旧项目是用 C 编写的,其中包含很多“IplImage”。
这是一个例子,
IplImage** img_array = new IplImage* [img_number];
for(int i = 0; i < img_number; i++)
{
img_array[i] = cvCreateImage(cvSize(320, 240), IPl_DEPTH_8U, 3);
cvSet(img_array[i], cvScalar(0, 0, 0));
}
.
.
.
.
.
for(int i = 0; i < img_number; i++)
{
cvReleaseImage(&img_array[i]);
}
delete[] img_array;
现在我必须将我的项目重写为 C++ 形式,我应该使用 cv::Mat。
但是,我不确定将上面的代码写入 cv::Mat 的相同方式吗?
我试过这样写:
int dims[] = {img_number, 320, 240};
cv::Mat img_array(3, dims, CV_8UC3);
虽然一切看起来都不错,但是说到一行:
for(int i = 0; i < img_number; i++)
{
img_array[i] = random_img.clone();
}
显示错误:
C2676:binary operator'[':'cv::Mat'does not define this operator or a conversion to a type acceptable to the predefined operator
之后我找到了另一种可能的方式,但需要使用向量:
vector<Mat> img_array;
for(int i = 0 ; i < img_number; i++)
{
img_array.push_back(random_img.clone());
}
我还没有实现,不知道这是否是我想要的解决方案?
欢迎任何建议。
【问题讨论】:
-
一定要用
vector<Mat>!!!