2013-02-19 81 views
0

我有一個問題,處理圖像的寬度和寬度的使用。圖片的寬度和寬度,現在是什麼?

我有尺寸以及圖像數據作爲QByteArray。我也有寬度步驟。我的問題是如何使用widthstep正確填充Ipl圖像,因爲我的圖像的寬度是4095,這不是8的整數倍。我成功地填充了寬度爲8的整數倍的圖像,但現在我堅持使用這個問題在眼前。任何使用widthstep填充IplImage的通用代碼都會受到歡迎和高度讚賞。 :D

下面是我的開關盒的一部分工作; 8的默認整數倍圖像寬度:

default: 
     { 
      IplImage* extracted_sar_image; // our image declaration 
      CvSize size; // size type has width and height attributes 
      size.height = sar_nrows_integer; // height of size 
      size.width = sar_ncols_integer; 

      extracted_sar_image = cvCreateImageHeader(size, IPL_DEPTH_8U, 1); 
      extracted_sar_image->imageData = sar_image_data_2.data();   

      cvNamedWindow("Image", CV_WINDOW_NORMAL); 
      cvShowImage("Image", extracted_sar_image); 
      cvMoveWindow("Image", 100, 100); 
      cvSaveImage("C:/Users/z_slant/Desktop/generated_extracted_sar_image.bmp", extracted_sar_image); 
      // delay to observe the image that is being saved 
      cvWaitKey(10000); 
      // deallocates the image data 
      cvReleaseImage(&extracted_sar_image); 
      // closes image display window 
      cvDestroyWindow("Image"); 

     break; 
     } 

回答

1

您必須考慮openCV結構中的字節對齊。在OpenCV中的IplImage

1線是widthStep字節中的QByteArray長

1線長

從而寬度字節,由線複製數據線應該確定。

qByteArray myArray; 
IplImage* extracted_sar_image; // our image declaration 
CvSize size; // size type has width and height attributes 
size.height = sar_nrows_integer; // height of size 
size.width = sar_ncols_integer; 

extracted_sar_image = cvCreateImageHeader(size, IPL_DEPTH_8U, 1); 

for (int row = 0 ; row < size.height ;row++) 
{ 
    memcpy(&extracted_sar_image->imageData[row*extracted_sar_image->widthStep],&myArray.data()[row*size.width],size.width); 
} 
+0

謝謝你。我會試試這個,讓你知道我是否能夠使它工作。 :d – user1830899 2013-02-19 14:22:51