首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cvGetImage编写cvMat时发出问题

使用cvGetImage编写cvMat时发出问题
EN

Stack Overflow用户
提问于 2011-03-05 09:49:53
回答 2查看 2.7K关注 0票数 1

我在写cvMat图片时遇到了一个问题。

这就是我所做的。

代码语言:javascript
复制
IplImage* low_threshold_mask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
CvMat* labelMat = cvCreateMat(low_threshold_mask->height,low_threshold_mask->width,CV_32F);

/* I在函数中填充labelMat元素。它是这样做的: cvmSet(labelMat,r,c,label);// long */

为了检查这些值,我在文本文件中转储每个像素值,并转储图像。

代码语言:javascript
复制
IplImage* labelImg;
IplImage imageHeader;
labelImg = cvGetImage(labelMat, &imageHeader);

现在,当我交叉检查像素强度与转储文本文件中相应的值时,我发现匹配错误。我觉得我在文本文件中得到了正确的值,但是在图像中得到了错误的值。

有人能帮忙找出这个错误吗?

我仍然面临着这个问题。我已经上传了我的节目。我会解释我到底在哪里面对错误。

library used:与openCV一起,我使用的是boost库的disjoint_sets。

基本上,我正在做连接组件标签。为了调试的目的,对于第20帧,我已经将每个像素的标签信息转储在a)文本文件中,b)与像素的最终标签相同的图像。因此,我期望文本和图像中的值都是相同的。但这是不可能的。我不知道为什么。文本文件显示正确的值,但不显示图像。我在matlab中检查图像的像素值(我已经在matlab中处理了索引,从1开始,而不是0)。

我的文本文件a) (frame20final.txt)在GrimsonGMM.cpp/ConCompLabeling()中填充。(frame20image.txt)在main.cpp中填充--我转储的图像(Frag-ccs.jpg)在main.cpp中填充。

两个文本文件都得到相同的值。因此,在编写来自CvMat.的图像时肯定有一些错误。

测试视频:uncomp.avi你可以尝试与任何其他视频也。

预先谢谢你,考希克

EN

回答 2

Stack Overflow用户

发布于 2011-03-23 16:49:17

我明白我为什么会犯这个错误。我在.jpg图像中倾倒,这是在做压缩。这是在我使用.png时解决的

票数 1
EN

Stack Overflow用户

发布于 2011-03-05 12:51:33

你的问题太简单了。

您希望使用CvMat,在使用CvMat做完do操作之后,您希望将您的CvMat绘制成一个图像。

您必须创建imageHeader,如下所示。

代码语言:javascript
复制
CvMat* mat = cvCreateMatHeader(rows, cols, type);
mat->step = 4 * (mat->cols * CV_ELEM_SIZE1(mat->type) * CV_MAT_CN(mat->type) / 4 + 1);//critical
cvCreateData(mat);

在OpenCV 2.0和C++接口下,没有必要从Mat更改为IplImage。

你可以用cvShowImage来绘制你的图像,如果你想转换成IplImage,只需做一个简单的IplImage *img = labelMat;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5203007

复制
相关文章

相似问题

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