首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenCV中用标量分割Ipl图像

在OpenCV中用标量分割Ipl图像
EN

Stack Overflow用户
提问于 2013-08-01 09:48:23
回答 1查看 2K关注 0票数 1

我试图使用cvDiv和OpenCV的C将2除以Ipl映像的所有矩阵元素。我的代码如下:

代码语言:javascript
复制
IplImage* src = cvLoadImage(argv[1]);

CvMat*  src1 = cvCreateMat(src->height, src->width, CV_16UC3);

cvDiv(src, src1, double scale=2);

但是,我得到了以下错误:

代码语言:javascript
复制
  error: expected primary-expression before ‘double’

有人能说出原因吗?或者有没有其他方法可以将矩阵的所有元素除以一个特定的数字,比如2?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 11:09:19

你可以这样做。但正如我所说,在C中这样做是相当困难和冗长的,但这是可能的。在openCV C-Api中,图像的矩阵是相同类型的,这一点非常重要。因此,您将无法用您的

代码语言:javascript
复制
CvMat*  src1 = cvCreateMat(src->height, src->width, CV_16UC3);

但是像这样试试,这就像我的机器上的一个符咒。

代码语言:javascript
复制
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++矩阵构造器和操作符重载使得任务几乎变得微不足道:

代码语言:javascript
复制
cv::Mat Src2 = cv::imread( argv[1] );
cv::Mat Dest2 = Src2 / 2;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17990633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档