0

画像の width と widthstep の使用について質問があります。

寸法と画像データを QByteArray として持っています。幅ステップもあります。私の質問は、イメージの幅が 4095 であり、8 の整数倍ではないため、widthstep を使用して Ipl イメージを適切に設定する方法です。目前の問題。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;
      }
4

1 に答える 1

1

openCV構造からのバイトアラインメントを考慮する必要があります。

openCVIplImageの1行はwidthStepバイト長です

QbyteArrayの1行は幅バイト長です

したがって、データを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);
}
于 2013-02-19T09:57:46.210 に答える