使用cvMat编写cvGetImage时出现问题

时间:2011-03-05 09:49:54

标签: opencv

我在从cvMat写图像时遇到问题。

这就是我所做的。

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);

/ *我在函数中填充了labelMat的元素。它的完成方式如下:cvmSet(labelMat,r,c,label); //其中label的类型为 long * /

要检查值,我会将每个像素值转储到文本文件中,并转储图像。

IplImage* labelImg;
IplImage imageHeader;
labelImg = cvGetImage(labelMat, &imageHeader);

现在当我用倾斜文本文件中的相应值交叉检查像素强度时,我发现不匹配。我觉得我在文本文件中有正确的值,但在图像中有错误的值。

任何人都可以帮忙搞清楚错误吗?


---------------------新增加-------------------

我仍然面临着这个问题。我上传了programs。我将解释我在哪里遇到错误。

使用

:与openCV一起,我使用了boost库的disjoint_sets。

基本上我正在做连接组件标记。 出于调试目的,对于第20帧,我已将每个像素的标签信息都转储到a)文本文件中以及b)强度等级与像素的最终标签相同的图像。所以我期待文本和图像中的值相同。但那并没有发生。我无法弄清楚原因。文本文件显示正确的值,但不显示图像。我在Matlab中检查图像的像素值(我已经处理了matlab中的索引,从1开始而不是0)。

我的文字档案 a)(frame20final.txt)填充在GrimsonGMM.cpp / ConCompLabeling()中。 b)(frame20image.txt)在main.cpp中填充 我的转储图像(frame-ccs.jpg)填充在main.cpp中。

两个文本文件都获得相同的值。 因此,从CvMat写入图像时必定会出现一些错误。

测试视频:person15_walking_d1_uncomp.avi 您也可以尝试使用任何其他视频。

提前致谢, 考希克

2 个答案:

答案 0 :(得分:1)

我理解为什么我收到错误。我倾向于 .jpg 图像正在进行压缩。当我使用.png

时解决了这个问题

答案 1 :(得分:0)

你的问题很容易。

您希望使用CvMat,在使用CvMat进行操作后,您希望将CvMat绘制成图像。

你必须创建imageHeader,就像这样。

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;