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

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

谢谢

  1. 设置您正在使用的图像的ROI(感兴趣区域),这意味着只能在此区域进行任何计算。

    image.ROI =新的矩形(x,Y,宽度,高度);

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

TYPE average = image.GetAverage(image);

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

所有过程都是循环通过每个像素添加其值然后除以总像素数。 保存您自己编写代码。

谢谢克里斯

我认为较新版本的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的函数locateROI