我想使用Emgu CV(或OpenCV)剪切图像的子图像(或裁剪它)并计算该部分的平均颜色;寻找变化。
由于
答案 0 :(得分:13)
设置您正在使用的图像的ROI(感兴趣区域),这意味着只能在此区域进行任何计算。
image.ROI =新的矩形(x,Y,宽度,高度);
计算ROI的平均值,其中“TYPE”是图像相关的Bgr,用于灰度的颜色灰色
TYPE average = image.GetAverage(image);
所有过程都循环通过每个像素添加其值然后除以总像素数。保存您自己编写代码。
由于 克里斯
答案 1 :(得分:2)
我认为较新版本的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
您可以使用任何子帧(我的示例中为roi
和head
)来计算区域的平均值。有一个adjustROI
函数可以移动感兴趣的区域,函数locateROI
也可以使用。