我试图使用cvDiv和OpenCV的C API将Ipl图像的所有矩阵元素除以2。我的代码如下:
IplImage* src = cvLoadImage(argv[1]);
CvMat* src1 = cvCreateMat(src->height, src->width, CV_16UC3);
cvDiv(src, src1, double scale=2);
但是,我收到以下错误:
error: expected primary-expression before ‘double’
有人可以说明原因吗?或者是否有任何其他方法可以将矩阵的所有元素除以特定数字2?
答案 0 :(得分:5)
你可以这样做。但正如我所说,在C-api中这样做是非常困难和冗长的,但这是可能的。在openCV C-Api中,图像的矩阵具有相同的类型非常重要。因此,您无法使用
执行此操作CvMat* src1 = cvCreateMat(src->height, src->width, CV_16UC3);
但尝试这样就像我机器上的魅力一样。
IplImage* src = cvLoadImage(argv[1]);
/*This ensures you'll end up with an image of the same type as the source image.
*and it also will allocate the memory for you this must be done ahead.*/
IplImage* dest = cvCreateImage(
cvSize(src->width, src->height),
src->depth,
src->nChannels
);
/*we use this for the division*/
IplImage* div= cvCreateImage(
cvSize(src->width, src->height),
src->depth,
src->nChannels
);
/*this sets every scalar to 2*/
cvSet( div, cvScalar(2,2,2), NULL);
cvDiv( src, div, dest, 1 );
以上将使用C-api完成工作,使用C ++ - api可以使用以下代码实现同样的功能,这是我建议任何以opencv开头的人,因为我觉得C-api很多更冗长,更难。 C ++矩阵构造函数和运算符重载使得任务几乎无足轻重:
cv::Mat Src2 = cv::imread( argv[1] );
cv::Mat Dest2 = Src2 / 2;