Как динамически рисовать прямоугольник в opencv в соответствии с шириной и высотой изображения?

я хочу нарисовать прямоугольник в opencv в соответствии с шириной и высотой изображения (т.е. я не хочу давать статические значения cvRectangle) я хочу нарисовать прямоугольник, который покрывает большую часть области любого изображения, большого или маленького в другом слова, я хочу нарисовать самый большой прямоугольник на каждом изображении, спасибо


person Java Player    schedule 16.05.2012    source источник
comment
Вы имеете в виду просто получить ширину и высоту изображения и передать их в cvRectangle для каждого изображения ??   -  person mathematical.coffee    schedule 17.05.2012
comment
хорошо, спасибо @mathematical.coffee, я обновил свой вопрос соответствующим ответом.   -  person Java Player    schedule 17.05.2012
comment
Если вы ответили на свой вопрос, не стесняйтесь опубликовать ответ и принять его.   -  person mathematical.coffee    schedule 17.05.2012


Ответы (2)


Может быть, вы хотели бы использовать процентные размеры?

IplImage *img=cvLoadImage(fileName,CV_LOAD_IMAGE_COLOR);

int imageWidth  = img->width;
int imageHeight = img->height;
int imageSize   = img->nSize;

int ratio     = 90; // our ROI will be 90% of our input image

int roiWidth  = (int)(imageWidth*ratio/100);
int roiHeight = (int)(imageHeight*ratio/100);

// offsets from image borders
int dw = (int) (imageWidth-roiWidth)/2;
int dh = (int) (imageHeight-roiHeight)/2;

cvRectangle(img,
            cvPoint(dw,dh),                     // South-West point 
            cvPoint(roiWidth+dw, roiHeight+dh), // North-East point
            cvScalar(0, 255, 0, 0), 
            1, 8, 0);

cvSetImageROI(img,cvRect(dw,dh,roiWidth,roiHeight));

Итак, теперь, если вы установите коэффициент = 90, а ваше исходное изображение имеет размер 1000x1000 пикселей, тогда ваш ROI будет 900x900 пикселей, и он будет в центре вашего изображения.

person Larry Cinnabar    schedule 17.05.2012

я пробовал это, и это работает хорошо

IplImage *img=cvLoadImage(fileName,CV_LOAD_IMAGE_COLOR);
             int imageWidth=img->width-150;
             int imageHeight=img->height-150;
             int imageSize=img->nSize;
             cvRectangle(img,cvPoint(imageWidth,imageHeight), cvPoint(50, 50),cvScalar(0, 255, 0, 0),1,8,0);
             cvSetImageROI(img,cvRect(50,50,(imageWidth-50),(imageHeight-50))); 
person Java Player    schedule 17.05.2012