gpt4 book ai didi

c++ - 在 OpenCV 中查找多边形边界内的平均颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:30 25 4
gpt4 key购买 nike

背景

我正在尝试创建一个实用程序,该实用程序将使用 OpenCV 返回给定多边形内的平均像素颜色。多边形将通过 4 个点定义,但不一定是矩形/正方形。例如,以下结构是预期的:

     A__________B    A_______B
/ / \ \
/ / \ \
D/__________/C D\_______\C

给定 OpenCV 中的 cv::Mat 图像和由点(A、B、C、D)定义的多边形。我知道点 A、B、C 和 D,但我想计算多边形内的平均像素颜色。我想从 OpenCV 社区获得一些关于如何最有效地做到这一点的建议。


研究完成

另一个post StackOverflow 上建议使用 drawContours 绘制等高线函数然后取 mean围绕轮廓的边界矩形。我显然必须修改均值计算,以便它使用 fillPoly 绘制的多边形。函数代替。

非常感谢建议/疑虑!

最佳答案

您可以简单地使用 mean带有 mask 的函数,其中 mask 是您填充的多边形。

#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;

int main()
{
// Create a black image with a gray rectangle on top left
Mat1b img(300, 300, uchar(0));
rectangle(img, Rect(0, 0, 100, 100), Scalar(100), CV_FILLED);

// Define a polygon
Point pts[1][4];
pts[0][0] = Point(20, 20);
pts[0][1] = Point(40, 100);
pts[0][2] = Point(200, 60);
pts[0][3] = Point(150, 30);

const Point* points[1] = {pts[0]};
int npoints = 4;

// Create the mask with the polygon
Mat1b mask(img.rows, img.cols, uchar(0));
fillPoly(mask, points, &npoints, 1, Scalar(255));

// Compute the mean with the computed mask
Scalar average = mean(img, mask);

std::cout << average << std::endl;

return 0;
}

关于c++ - 在 OpenCV 中查找多边形边界内的平均颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32466616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com