你可以这样做。但正如我所说,在 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;