我在从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 您也可以尝试使用任何其他视频。
提前致谢, 考希克
答案 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;