我一直在努力找到检测纸张上4个黑色方块的最佳方法,并用它们将纸张隔离在自己的图像中.

我是OpenCV的新手并且有一些问题.我需要根据它们的形状检测瓶子或罐子.为此我使用了覆盆子pi板和pi相机.背景总是黑色,不会改变.我已经尝试了很多可能的解决方案来解决这个问题但是无法获得满意的结 我尝试过的东西包括边缘检测,形态转换,matchShapes(),matchTemplate().如果我能以最高的准确度高效地完成这项任务,请告诉我.
示例图片:

我有个,Mat contours并且每个contour都有approxPolyDP。我现在要检测的是矩形,三角形,圆形等形式。例如,以其他颜色或使用画布等重绘它们。
有没有利用轮廓的方法?我如何才能访问其中的点Mat contours并进一步简化它们(删除变形,或者如果两个重要点靠得很近,可以安全地删除其中之一)?
我正在用Java(Android)开发,所以并不是我可以使用所有的C / C ++方法/类型(否则JNI调用会很浪费)。
我正在开发一个项目,我使用OpenCV来检测形状和颜色.
有5种颜色(红色,绿色,黄色,蓝色和白色)和4种形状(矩形,星形,圆形和心形).我已经能够可靠地辨别颜色,我可以检测形状时使用的图像就像是绘制图像这个 使用此代码.请注意,图像仅用于演示,我的代码中的范围值不适用于这些颜色.
import cv2
import numpy as np
class Shape():
def __init__(self, color, shape, x, y, approx):
self.color = color
self.shape = shape
self.x = x
self.y = y
self.approx = approx
def closing(mask):
kernel = np.ones((7,7),np.uint8)
closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
return closing
def opening(mask):
kernel = np.ones((6,6),np.uint8)
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
return opening
#Define Red
lower_red = np.array([0, 90, 60], dtype=np.uint8)
upper_red = np.array([10, 255, 255], dtype=np.uint8)
red = [lower_red, upper_red, 'red']
#Define Green
lower_green …Run Code Online (Sandbox Code Playgroud)