6

opencvでIplImageをトリミングする最も効果的な方法は何だろうか。私は現在次のことをしていますが、それは複雑すぎるようで、もっと良い方法があると確信しています。

    // set ROI on original image, create 'tmp' image and copy data over.
    cvSetImageROI(orig_image, cvRect(55, 170, 530, 230));

    IplImage *tmp = cvCreateImage(cvGetSize(orig_image),
                               orig_image->depth,
                               orig_image->nChannels);

    cvCopy(m_depth_run_avg, tmp, NULL);
    cvResetImageROI(orig_image);

    // copy temporary image back to original image.
    IplImage *orig_image= cvCreateImage(cvGetSize(tmp),
                           tmp->depth,
                           tmp->nChannels);
    cvCopy(tmp, orig_image, NULL);

画像を切り抜くためのより良い方法はありますか?

4

2 に答える 2

5

はい、あります。最後に元の画像を再現しているようです。次のコードが示すように、これは必要ありません。

IplImage* orig = cvLoadImage("test.jpg");
if (!orig)
{
    return -1;
}
printf("Orig dimensions: %dx%d\n", orig->width, orig->height);

cvSetImageROI(orig, cvRect(0, 250, 350, 350));

IplImage *tmp = cvCreateImage(cvGetSize(orig),
                               orig->depth,
                               orig->nChannels);

cvCopy(orig, tmp, NULL);
cvResetImageROI(orig);

orig = cvCloneImage(tmp);
printf("Orig dimensions after crop: %dx%d\n", orig->width, orig->height);

cvNamedWindow( "result", CV_WINDOW_AUTOSIZE );
cvShowImage( "result", orig);
cvWaitKey( 0 );
cvDestroyWindow( "result" );

残念ながら、の結果を保存するための一時的な画像を作成することが不可欠ですcvCopy()

于 2012-09-25T16:27:26.467 に答える
0

c++を使用して画像を簡単にトリミングできます。このコードが正常であることを確認してください。試してみてください

                       IplImage *source_image = cvLoadImage("paper.jpg", 1);


                     cout << "Width:" << source_image->width << " pixels" << endl;
                     cout << "Height:" << source_image->height << " pixels" << endl;
                     int width = source_image->width;
                     int lenght = source_image->height;

                     cv::Rect roi;
                     roi.x = 1200; //1200     // 950
                     roi.y = 355; //350      //150 
                     roi.width = 2340; //2360          //2750
                     roi.height = 1425;  //1235 /2500         //2810   //2465 fully braille sheet


                     IplImage *cropped_Image1 = cvCreateImage(cvSize(roi.width, roi.height), source_image->depth, source_image->nChannels);
                     cvSetImageROI(source_image, roi);
                     cvCopy(source_image, cropped_Image1);
                     cvResetImageROI(source_image);
                     cvShowImage("Cropped Image", cropped_Image1);
于 2018-02-06T09:22:01.417 に答える