我试图使用cvDiv和OpenCV的C将2除以Ipl映像的所有矩阵元素。我的代码如下:
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?
发布于 2013-08-01 11:09:19
你可以这样做。但正如我所说,在C中这样做是相当困难和冗长的,但这是可能的。在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开始的代码,因为我觉得can更冗长,也更困难。C++矩阵构造器和操作符重载使得任务几乎变得微不足道:
cv::Mat Src2 = cv::imread( argv[1] );
cv::Mat Dest2 = Src2 / 2;https://stackoverflow.com/questions/17990633
复制相似问题