资源简介
图形识别代码,可以识别多种颜色与形状,还可以计算面积与周长,形状包括三角形,正方形,长方形,梯形,平行四边形,菱形,其他四边形,五边形,五角星,六边形和其他多边形,椭圆,圆等,颜色包括蓝色,紫色,红色,橙色等
python,opencv。如果没有办法运行,请私信我。
代码片段和文件信息
import cv2 as cv
import numpy as np
import math
“““
功能:实现多种几何图形的形状及颜色的识别,并计算面积及周长
可以识别的图形:三角形,任意四边形(梯形,平行四边形,菱形,正方形,矩形,不特殊四边形),
五边形,五角星,六边形,多边形,椭圆,半圆,圆
可以识别的颜色:红色,绿色,蓝色,黄色,黑色,紫色,橙色,白色
除了定义的可识别颜色外,其他返回其对应的rgb值,提示用户根据rgb值去找寻相应颜色
除了定义的可识别图形外,其他为未定义的图形
“““
noise_b = 0.5
class ShapeAnalysis:
def __init__(self):
self.shapes = {‘triangle‘: 0
‘quadrilateral‘: 0 ‘trapezium‘: 0 ‘parallelogram‘: 0
‘rectangle‘: 0 ‘rhombus‘: 0 ‘square‘: 0
‘pentagon‘: 0 ‘pentagram‘: 0 ‘hexagon‘: 0
‘polygons‘: 0 ‘ellipse‘: 0 ‘circle‘: 0
‘undefined‘: 0
}
self.colors = {‘white‘: 0 ‘black‘: 0
‘red‘: 0 ‘green‘: 0
‘blue‘: 0 ‘yellow‘: 0
‘orange‘: 0 ‘purple‘: 0
‘others‘: 0
}
def analysis(self frame):
self.re_strover = ‘识别结果:\n‘
h w ch = frame.shape # 获取图形信息
result = np.zeros((h w ch) dtype=np.uint8) # 生成跟图形相同大小的矩阵
cv.imshow(“input image“ frame)
# 二值化图像
print(‘start to binary image and detect edges...\n‘)
gray = cv.cvtColor(frame cv.COLOR_BGR2GRAY)
# threshold:固定阈值二值化 ret dst输出图 = cv2.threshold(src输入图 thresh阈值 maxval type)
# type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY;
# cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
# adaptiveThreshold自适应阈值二值化
ret binary = cv.threshold(gray 0 255 cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
# 函数cv2.findContours()有三个参数。第一个是输入图像,第二个是轮廓检索模式,第三个是轮廓近似方法。
# 轮廓的点集(contours)[Next Previous First_Child Parent]
# 各层轮廓的索引(hierarchy)
contours hierarchy = cv.findContours(binary cv.RETR_TREE cv.CHAIN_APPROX_SIMPLE)
if len(contours) < 1e-6:
print(‘there is nothing can be detected! Please check the input image. Thanks!‘)
else:
shape_numbers = 0
for cnt in range(len(contours)):
# 通过计算周长和面积来排除一些图像干扰
# 计算面积与周长
p = cv.arcLength(contours[cnt] True)
area = cv.contourArea(contours[cnt])
if area > noise_b and p > noise_b: # 如果面积和周长小于0.5判断为噪声干扰,不是图形
shape_numbers += 1 # 统计检测到图形
# 为图形,做统计分析
cv.drawContours(result contours cnt (0 255 0) 2) # 画出轮廓
# 求解中心位置
mm = cv.moments(contours[cnt])
cx = int(mm[‘m10‘] / (mm[‘m00‘] + 1e-12))
cy = int(mm[‘m01‘] / (mm[‘m00‘] + 1e-12))
cv.circle(result (cx cy) 3 (0 0 255) -1)
# 获取颜色信息
color = fr
- 上一篇:python网络爬虫获取景点信息源码
- 下一篇:python火焰检测颜色模型代码
评论
共有 条评论