在过去的几年里,我参与过的最有趣的项目之一是关于图像处理的项目.我们的目标是建立一个能够识别可口可乐"罐头"的系统(请注意,我正在强调'罐头'这个词,你会在一分钟内看到原因).您可以在下面看到一个示例,其中可以使用缩放和旋转在绿色矩形中识别.
对项目的一些限制:
所以你最终可能会遇到这样棘手的事情(在这种情况下,我的算法完全失败):
我不久前做了这个项目,并且做了很多乐趣,我有一个不错的实现.以下是有关我的实施的一些细节:
语言:使用OpenCV库在C++中完成.
预处理:对于图像预处理,即将图像转换为更原始的形式以给出算法,我使用了两种方法:
算法:我为这个任务选择的算法本身取自这本关于特征提取的神奇书籍,称为广义霍夫变换(与常规Hough变换有很大不同).它基本上说了几件事:
最后,你得到了一张投票的热图,例如,这里所有罐子轮廓的像素都会投票给它的引力中心,所以你会在同一个像素对应的投票中得到很多票.中心,并将在热图中看到如下峰值:
一旦你有了这个,一个简单的基于阈值的启发式可以给你中心像素的位置,你可以从中获得比例和旋转,然后围绕它绘制你的小矩形(最终的比例和旋转因子显然将相对于你原始模板).理论上至少......
结果:现在,虽然这种方法在基本情况下起作用,但在某些方面却严重缺乏:
你能帮助我改进我的特定算法,只使用OpenCV功能来解决上面提到的四个具体问题吗?
我希望有些人也会从中学到一些东西,毕竟我认为不仅要问问题的人应该学习.:)
我有这个项目,我需要(在iOS上)检测图像内的简单几何形状.
在搜索互联网后,我得出结论,最好的工具是OpenCV.事情是,直到两个小时前,我不知道OpenCV是什么,我甚至从未做过任何涉及图像处理的事情.我的主要经验是JS/HTML,C#,SQL,Objective-C ......
我从哪里开始呢?
我已经找到了这个答案,我能够消化并通过阅读其他东西,我知道OpenCV应该返回带有点/角的形状数组,这是真的吗?它还将如何代表一个圆圈或半圆圈?还有形状方向呢?
你知道任何可以展示类似功能的Demo iOS项目吗?
我正在开发一个项目,我使用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)