相关疑难解决方法(0)

如何有效地确定多边形是凸的,非凸的还是复杂的?

从手册页XFillPolygon:

  • 如果shape复杂的,则路径可以自相交.请注意,路径中的连续重合点不会被视为自相交.

  • 如果shapeConvex,对于多边形内的每对点,连接它们的线段不与路径相交.如果客户端知道,指定Convex可以提高性能.如果为非凸的路径指定Convex,则图形结果未定义.

  • 如果shapeNonconvex,则路径不会自相交,但形状不是完全凸的.如果客户端知道,指定Nonconvex而不是Complex可以提高性能.如果为自相交路径指定Nonconvex,则图形结果未定义.

我遇到填充性能问题XFillPolygon,正如手册页所示,我想要采取的第一步是指定多边形的正确形状.我目前正在使用Complex来保证安全.

是否有一种有效的算法来确定多边形(由一系列坐标定义)是凸的,非凸的还是复杂的?

algorithm geometry polygon xlib computational-geometry

45
推荐指数
4
解决办法
7万
查看次数

使用 Open CV 获取轮廓内的平均颜色

所以我决定开始一起学习 Open CV 和 Python!

我的第一个项目是在相对静止的背景上检测移动物体,然后检测它们的平均颜色以对它们进行排序。至少有 10 个物体需要检测,我正在处理彩色视频。

到目前为止,我设法去除背景,识别轮廓(可选地获取每个轮廓的中心),但现在我正在努力获得每个轮廓内部的平均或平均颜色。有一些关于此类问题的主题,但其中大部分是用 C 编写的。显然我可以使用,cv.mean()但我无法获得一个工作掩码来提供此功能。我想这不是那么困难,但我被困在那里......干杯!

import numpy as np
import cv2

video_path = 'test.h264'

cap = cv2.VideoCapture(video_path)
fgbg = cv2.createBackgroundSubtractorMOG2()


while (cap.isOpened):

    ret, frame = cap.read()
    if ret==True:
        fgmask = fgbg.apply(frame)
        (contours, hierarchy) = cv2.findContours(fgmask, cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

        for c in contours:
            if cv2.contourArea(c) > 2000:
                cv2.drawContours(frame, c, -1, (255,0,0), 3)
        cv2.imshow('foreground and background',fgmask)
        cv2.imshow('rgb',frame)

    key = cv2.waitKey(1) & 0xFF

    if key == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

python opencv opencv-contour

8
推荐指数
2
解决办法
1万
查看次数

对具有透明背景的小图像感兴趣的区域

我想从给定蒙版的图像中提取感兴趣的区域 (ROI),并将其保存在一个调整为 ROI 大小且具有透明背景的新文件中。

例如给定这张图片:
在此处输入图片说明
我想得到这个:
在此处输入图片说明

这里的解决方案NumPy/OpenCV 2: 如何裁剪非矩形区域?提供全尺寸的输出图像。我怎样才能让它输出 ROI 的矩形大小?

我可以按位and图像和蒙版,但我真的很困惑调整图像大小并将其另存为透明 png 的好方法。

c++ python opencv image image-processing

3
推荐指数
1
解决办法
2876
查看次数