定义形象的投资回报率的OpenCV用C [英] Define image ROI with OpenCV in C
问题描述
我有一个关于如何定义与OpenCV的投资回报率一个问题。我知道 cvSetImageROI
,但我想知道是否有可能定义与OpenCV的投资回报率一比矩形形状不同功能的定义。例如,在一个圆或以不同的形式定义的ROI。
这是可能做到这一点?
cvSetImageROI(IMG1,cvRect(A,B,C,D));
块引用>解决方案以下code,你可能会发现这里或甚至在这里 使用位设置一个圆形的投资回报率掩盖你的形象。
的#includecv.h
#包括highgui.hINT主(INT ARGC,字符** argv的)
{
*的IplImage SRC,*资源*投资回报率; / *用法:其中,prog_name> <图像> * /
如果(的argc 2)
{
fprintf中(标准错误,用法:%S<图像> \\ N的argv [0]);
返回1;
} SRC = cvLoadImage(的argv [1],1);
RES = cvCreateImage(cvGetSize(SRC),8,3);
投资回报率= cvCreateImage(cvGetSize(SRC),8,1); / * prepare的投资回报率的形象* /
cvZero(ROI); / *请注意,你可以使用任何形状的ROI * /
cvCircle(
投资回报率,
cvPoint(130,100),
50,
CV_RGB(255,255,255)
-1,8,0
); / *提取子图像* /
cvAnd(SRC,SRC,资源,投资回报率); / *
*主做处理与子图像在这里。
*在本实施例中,我们简单地反转子图像
* /
cvNot(RES,RES); / *'恢复'子图像* /
的IplImage * roi_C3 = cvCreateImage(cvGetSize(SRC),8,3);
cvMerge(投资回报率,投资回报率,投资回报率,NULL,roi_C3);
cvAnd(RES,roi_C3,资源,NULL); / *合并子图像与原始图像* /
cvNot(投资回报率,投资回报率);
cvAdd(SRC,资源,资源,投资回报率); / *显示结果* /
cvNamedWindow(的argv [1],1);
cvNamedWindow(RES,1);
cvShowImage(的argv [1],SRC);
cvShowImage(RES,RES); cvWaitKey(0); / *整齐* /
cvDestroyAllWindows();
cvReleaseImage(放大器; SRC);
cvReleaseImage(安培; RES);
cvReleaseImage(安培;投资回报率); 返回0;
}有关五边形或六边形只是适应它,以便改变掩模的几何形状。选中此SO问题:?在OpenCV中使用ROI
I have a question about how to define a ROI with OpenCV. I know what the definition of the function
cvSetImageROI
but I want to know if is possible to define a ROI with OpenCV with a different shape than rectangle. For example, define a ROI in a circle or in different form.It is possible to do this?
cvSetImageROI(img1, cvRect(a, b, c, d));
解决方案The following code, which you could have found here or even here sets a circular ROI using a bit mask on your image.
#include "cv.h" #include "highgui.h" int main(int argc, char** argv) { IplImage* src, * res, * roi; /* usage: <prog_name> <image> */ if (argc < 2) { fprintf(stderr, "Usage: %s <image>\n", argv[0]); return 1; } src = cvLoadImage(argv[1], 1); res = cvCreateImage(cvGetSize(src), 8, 3); roi = cvCreateImage(cvGetSize(src), 8, 1); /* prepare the 'ROI' image */ cvZero(roi); /* Note that you can use any shape for the ROI */ cvCircle( roi, cvPoint(130, 100), 50, CV_RGB(255, 255, 255), -1, 8, 0 ); /* extract subimage */ cvAnd(src, src, res, roi); /* * do the main processing with subimage here. * in this example, we simply invert the subimage */ cvNot(res, res); /* 'restore' subimage */ IplImage* roi_C3 = cvCreateImage(cvGetSize(src), 8, 3); cvMerge(roi, roi, roi, NULL, roi_C3); cvAnd(res, roi_C3, res, NULL); /* merge subimage with original image */ cvNot(roi, roi); cvAdd(src, res, res, roi); /* show result */ cvNamedWindow(argv[1], 1); cvNamedWindow("res", 1); cvShowImage(argv[1], src); cvShowImage("res", res); cvWaitKey(0); /* be tidy */ cvDestroyAllWindows(); cvReleaseImage(&src); cvReleaseImage(&res); cvReleaseImage(&roi); return 0; }
For a pentagon or hexagon just adapt it so to change the geometric shape of the mask. Check this SO Question: Using ROI in OpenCV?.
这篇关于定义形象的投资回报率的OpenCV用C的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!