我在写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);/* I在函数中填充labelMat元素。它是这样做的: cvmSet(labelMat,r,c,label);// long */
为了检查这些值,我在文本文件中转储每个像素值,并转储图像。
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你可以尝试与任何其他视频也。
预先谢谢你,考希克
发布于 2011-03-23 16:49:17
我明白我为什么会犯这个错误。我在.jpg图像中倾倒,这是在做压缩。这是在我使用.png时解决的
发布于 2011-03-05 12:51:33
你的问题太简单了。
您希望使用CvMat,在使用CvMat做完do操作之后,您希望将您的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;
https://stackoverflow.com/questions/5203007
复制相似问题