繁体   English   中英

如何在opencv中获取灰色图像的强度指标

[英]How to get Intensity Pointer of the gray Image in opencv

我有一个图像的16位强度的二进制文件。 我已经阅读了简短的数据。 并使用以下代码创建16位灰度图像。

 IplImage *img=cvCreateImage( cvSize( Image_width, Image_height ), IPL_DEPTH_16S, 1 );
 cvSetData(img,Data, sizeof(short )*Image_width); 

其中数据是短数组。

然后使用此功能为此图像设置ROI

cvSetImageROI(img, cvRect(crop_start.x, crop_start.y, crop_width, Image_height));

并且投资回报率设置成功。

现在,在设置了ROI之后,我要访问“图像的强度”,这意味着我希望获得裁剪图像强度的指针。 我已经尝试过此代码来访问强度

short *crop_Imagedata=(short *)img->imageData;

但是这个指针没有给出正确的强度,因为我已经通过调试代码检查了强度。

任何人都可以告诉我如何获得图像强度的指针。

提前致谢

您好,我尝试了以下方法来找到您想做的事情:

IplImage *img=cvCreateImage( cvSize( 15, 15 ), IPL_DEPTH_16S, 1 );
cvSet(img,cvScalar(15));//sets all values to 15

cvSetImageROI(img, cvRect(4, 0, 10, 15));
short *crop_Imagedata=(short *)img->imageData;
((*crop_Imagedata) == 15) // true

您将获得的价值不在投资回报率中! IplImage结构的imageData只是一个简单的指针,而不是一个函数! 在我看来,opencv的rois并没有得到充分的文档记录和易于使用。 也许所有opencv算法都以某种方式使用rois。 我使用它们来使用,但是没有标准iplimage结构的自动功能来简单地使用它们。 如果您想使用更多魔术,请尝试使用新的cv :: Mat对象...但是如果您仍然想使用rois,则必须继续使用

     CvRect roi = cvGetImageROI(img);

方法始终检查位置。 之后,您将必须添加roi偏移量:

((short*)(img->imageData + (roi.y+ypos)*img-widthStep))[roi.x+xpos]

记住标准的Opencv是C库而不是C ++! 顺便说一句,混合cv :: Mat rois时可能会有点烦。 要将iplimage复制到没有roi的cv :: Mat中,我必须执行以下操作:

CvRect roitmp = cvGetImageROI(ilimage);
cvResetImageROI(ilimage);
cv::Mat tmp = cv::Mat(ilimage).clone();
cvSetImageROI(ilimage,roitmp);

也许这里有人知道与rois合作的正确方法...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM