如何使用Emgu CV(或OpenCV)剪切图像的子部分?

6
我想使用Emgu CV(或OpenCV)剪裁图像的子部分,并计算该部分的平均颜色;寻找变化。谢谢。
2个回答

13
  1. 设置您正在处理的图像的ROI(感兴趣区域),这意味着任何计算都只在此区域内完成。

    image.ROI = new Rectangle(x,Y,Width,Height);

  2. 计算ROI的平均值,其中“TYPE”是与图像相关的Bgr表示颜色,Gray表示灰度

TYPE average = image.GetAverage(image);

  1. 完成后,请重置图像的ROI,以便再次查看整个图像。

该过程只是循环遍历每个像素,将其值相加,然后除以像素的总数。这样可以避免编写冗长的代码。

谢谢 Chris


3

我认为OpenCV的新版本(2.3+)有一种不同的ROI处理方法。以下是手册中的说明:

// create a new 320x240 image
Mat img(Size(320,240),CV_8UC3);
// select a ROI
Mat roi(img, Rect(10,10,100,100));
// fill the ROI with (0,255,0) (which is green in RGB space);
// the original 320x240 image will be modified
roi = Scalar(0,255,0);

以下是我在一个实例中所做的内容:

以下是我的操作步骤:

// adding a header on top of image
Mat dst = Mat::zeros(frame.rows + HEADER_HEIGHT, frame.cols, CV_8UC3); 
// frame portion
Mat roi(dst, Rect(0, HEADER_HEIGHT-1, frame.cols, frame.rows));
// header portion
Mat head(dst, Rect(0,0,frame.cols, HEADER_HEIGHT));
// zeros to clear the header portion
Mat zhead = Mat::zeros(head.rows, head.cols, CV_8UC3);

frame.copyTo(roi); // copy new image to image portion of dst
zhead.copyTo(head); // clear the header portion of dst

您可以使用任何子框架(在我的示例中是roihead)来计算该区域的平均值。有一个 adjustROI函数可以移动兴趣区域,还有一个locateROI函数也可能会有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接