2012-07-13 138 views
1

我有一個二進制文件的16位圖像強度。我已經閱讀了這些數據。並使用以下代碼創建16位灰度圖像。如何獲得灰度強度指針的灰度圖像在opencv

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

其中數據是短陣列。

然後我使用該功能

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

和ROI被成功設置設定ROI爲這個圖象。

現在設置ROI後,我想訪問圖像的強度意味着我想要裁剪圖像的強度的指針。我曾嘗試這個代碼訪問強度

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

但是這個指針不能做出正確的強度,因爲我已經檢查,通過調試代碼。

任何人都可以告訴我如何獲得圖像強度的指針。

由於提前

回答

0

你好,我已經tryed下面找到你wannt做什麼,也許:

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結構的自動功能來簡單地使用它們。 如果wannt更神奇嘗試使用新的CV ::墊目標...... 但如果你仍然WANN噸至使用投資回報率,那麼你將不得不八方通使用

 CvRect roi = cvGetImageROI(img); 

方法來檢查所有的時間的位置。之後,您將不得不添加roi膠印:

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

記住標準Opencv是C庫而不是C++!順便說一句當混合cv ::馬特羅伊斯可以有點煩人。要將IplImage結構複製到CV ::墊沒有ROI我必須做到以下幾點:

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

也許這裏有人知道與投資回報的工作的正確方法...