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

本文关键字:图像 Emgu 何使用 CV OpenCV | 更新日期: 2023-09-27 18:00:42

我想使用Emgu CV(或OpenCV)剪切图像的子purt(或裁剪它),并计算该部分的平均颜色;寻找改变。

感谢

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

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

    图像。ROI=新矩形(x,Y,宽度,高度);

  2. 计算ROI的平均值,其中"TYPE"是灰度的颜色灰度的图像相关Bgr

TYPE average=图像。GetAverage(图像);

  1. 完成重置图像ROI后,您可以再次看到整个图像

所有的过程都是循环通过每个像素,将其值相加,然后除以像素总数。节省您自己编写代码的时间。

谢谢Chris

我认为较新版本的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)来计算区域的平均值。存在用于移动感兴趣区域的CCD_ 3函数和也可以使用的函数CCD_。