簡體   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