Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 使用cvMat写入cvGetImage时出现问题_Opencv - Fatal编程技术网

Opencv 使用cvMat写入cvGetImage时出现问题

Opencv 使用cvMat写入cvGetImage时出现问题,opencv,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(lab

我在从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);//其中标签类型为long*/

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

IplImage* labelImg;
IplImage imageHeader;
labelImg = cvGetImage(labelMat, &imageHeader);
现在,当我用转储文本文件中的相应值交叉检查像素强度时,我发现不匹配。我觉得我在文本文件中得到了正确的值,但在图像中得到了错误的值

有人能帮忙找出错误吗


---------------------新增-------------------

我仍然面临这个问题。我已经上传了我的。我将解释我面对错误的确切位置

已使用:与openCV一起,我正在使用不相交的boost库集合

基本上,我是在做连接组件标签。 出于调试目的,对于第20帧,我将每个像素的标签信息转储到a)文本文件以及b)强度级别与像素最终标签相同的图像中。因此,我希望文本和图像中的值相同。但事实并非如此。我不知道为什么。文本文件显示正确的值,但不显示图像。我在Matlab中检查图像的像素值(我在Matlab中已经注意到索引从1开始不是0)

我的文本文件 a) (frame20final.txt)在grimsongm.cpp/conmplabeling()中填充。 b) (frame20image.txt)在main.cpp中填充 我转储的图像(frame ccs.jpg)将填充到main.cpp中

两个文本文件获得相同的值所以从CvMat写入图像时一定有错误。

测试视频: 你也可以尝试任何其他视频

提前感谢,,
考希克你的问题太简单了

您希望使用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);
2和C++接口下,不需要从MAT转换到IPLIGION。

您可以使用
cvShowImage
打印图像,如果您想转换为
IplImage

只需简单地施展IplImage*img=labelMat

你的问题太简单了

您希望使用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);
2和C++接口下,不需要从MAT转换到IPLIGION。

您可以使用
cvShowImage
打印图像,如果您想转换为
IplImage

只需简单地施展IplImage*img=labelMat

我明白为什么会出错。我在做压缩的.jpg图像中转储。当我使用.png时,这个问题得到了解决。我明白为什么会出现这个错误。我在做压缩的.jpg图像中转储。这在我使用.png时得到了解决,但cvGetImage不应该也像OpenCV 2.0中rics在Plus中解释的那样工作吗?它给出了错误:无法从“CvMat*”转换为“IplImage*”,但cvGetImage不应该也像OpenCV 2.0中rics在Plus中解释的那样工作吗?它给出了错误:无法从“CvMat*”转换为“IplImage*”请允许我欢迎您为了提醒大家,我们在这里通常会做三件事:1)当你得到帮助时,试着也给予帮助,回答你专业领域的问题2)3)当你看到好的问答时,给他们投票,因为系统的可信度是基于用户通过分享他们的知识而获得的声誉。另外,请记住接受能更好地解决您的问题的答案,如果有,请允许我欢迎您来到StackOverflow,并提醒我们通常在这里做的三件事:1)当您收到帮助时,尝试也给予帮助,回答您专业领域的问题2)3)当您看到好的问答时,请投票支持,因为系统的可信度是基于用户通过分享知识而获得的声誉。还记得接受更好地解决问题的答案,如果有的话,