[英]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.