cvSetImageROI无法正常工作

时间:2015-04-26 19:18:37

标签: c++ opencv iplimage


我遇到cvSetImageROI无法正常工作的问题。请帮我纠正这个问题。 我有一个图像(比如,original_image for convention),我试图分成三个相等的部分。为方便起见,我将三个结果矩形命名为rectangle1,rectangle2,rectangle3。由于我的图像是矩形,因此每个合成的矩形都具有原始图像宽度的1/3。 我对这个图像的想法是,将图像的宽度除以3,因此结果将等于三个矩形中的每一个。宽度。
虽然当我尝试这个时,我的setImageROI无效。

我在这里发布代码片段以提取rectangle1,请指导我哪里出错了。她的x和y值是original_image的矩形值。

["Name", "email address"]

我想要显示的矩形1显示错误的裁剪图像,即高度错误。我不明白我在哪里改变original_image的高度,因为rectangle1显示错误的高度 我希望代码能够给我一张与原始图像高度相同的图像,但其宽度是原始图像的1/3。

1 个答案:

答案 0 :(得分:0)

尝试了你的代码,但我没有发现任何错误。也许您的xy在代码段中不为零。

cvWaitKey(0)仅用于调试,它对您的代码没有影响。

您的密码:

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/nonfree/features2d.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/opencv.hpp>
using namespace std;

int main(){
    IplImage *original_image = cvLoadImage("C:/1.jpg", 0);
    cvShowImage("orig", original_image);
    int x = 0;
    int y = 0;

    int resultant_rectangle_width = ((int)(original_image->width/3));
    int resultant_rectangle_height = (int)original_image->height;

    //Remember that (x,y) is the coordination of the up-left corner. 
    //Official Document: http://docs.opencv.org/2.4.9/modules/core/doc/basic_structures.html
    cvSetImageROI(original_image, cvRect(x, y,resultant_rectangle_width,resultant_rectangle_height));

    //this cout block was to check if the ROI was set on original_image,but it showed the original_image properties here.
    cout<<"original_image width after setting roi:"<<original_image->width<<endl;
    cout<<"original_image height after setting roi:"<<original_image->height<<endl;
    cvShowImage("3", original_image);
    cvWaitKey(0);
    //copying the ROI to another image
    IplImage *rectangle1 = cvCreateImage(cvGetSize(original_image),original_image->depth,original_image->nChannels);
    cvCopy(original_image, rectangle1);//using three arguments also did not help
    cvResetImageROI(original_image);
    cvShowImage("rectangle1", rectangle1);
    cvWaitKey(0);
    return 0;
}

结果:

整个图像 Whole Image

ROI

ROI

如你所见,它们的高度确实相同。因此,您很可能错误地将xy设置为错误值。