我遇到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。
答案 0 :(得分:0)
尝试了你的代码,但我没有发现任何错误。也许您的x
和y
在代码段中不为零。
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;
}
整个图像
ROI
如你所见,它们的高度确实相同。因此,您很可能错误地将x
和y
设置为错误值。