赞
踩
对给定的图像文件,识别其中的规则图形和图形所填充的颜色。在原图上进行标记并显示出来。
可以识别的规则图形:圆形、三角形、矩形、正方形、菱形、其他四边形、五角星、其他多边形。
可以识别的颜色:黑色、灰色、白色、粉色、红色、橙色、黄色、绿色、青色、蓝色、紫色。
标记图形:使用矩形框将识别到的规则图形框出,并在框附近显示标签(形状和颜色)。
1.程序开始时用户输入需要被识别图片的绝对路径,然后读取图片。
2.若读取失败则让用户重新输入。
3.对图片里的所有图形进行识别。遍历图片中识别到的每一个图形并判断其形状和填充颜色。
4.在图片上打上对应的标签并显示。
5.程序结束。
图像放于英文路径下,例:D:\test.png。
运行python程序,即可显示原图像和识别处理后的图像。
效果:
1. def findColor(imgcut): 2. img_hsv=cv2.cvtColor(imgcut,cv2.COLOR_BGR2HSV) 3. color_dict=ColorList() 4. color_most=0 5. color_now=None 6. for color in color_dict: 7. #二值化 和颜色字典比较 在上下限之间的像素变为255,之外的所有像素变为0 8. color_cmp=cv2.inRange(img_hsv,color_dict[color][0],color_dict[color][1]) 9. #膨胀 使颜色分割成块并更突出 10. color_boom = cv2.dilate(color_cmp,None,iterations=1) 11. #取出每一小块 12. contours,hierarchy=cv2.findContours(color_boom.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) 13. color_area=0 14. for img in contours: 15. color_area+=cv2.contourArea(img) 16. if(color_area>color_most): 17. color_most=color_area 18. color_now=color 19. return color_now
1. def LastButNotLeast(imginit,imgcopy): 2. # 灰度化 3. img_Gray = cv2.cvtColor(imginit, cv2.COLOR_BGR2GRAY) 4. # 高斯平滑 5. img_Blur = cv2.GaussianBlur(img_Gray, (3, 3), 1) 6. # 边缘检测 7. img_Canny = cv2.Canny(img_Blur, 50, 50) 8. #得到图片中所有图形的轮廓 9. #findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy 10. contours,hierarchy=cv2.findContours(img_Canny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) 11. #参数:输入图像,霍夫梯度法,分辨率,最小距离,检测方法的对应的参数*2,半径 12. for img in contours: 13. #计算面积 太小就不算了 14. area=cv2.contourArea(img) 15. if area>80: 16. perimeter=cv2.arcLength(img,True) 17. #折线化 18. side=cv2.approxPolyDP(img,0.01*perimeter,True) 19. #print(side) 20. #计算有几条线 21. sideNum=len(side) 22. #print(sideNum) 23. #计算边长 24. length=[] 25. k=[] 26. for i in range(0,sideNum): 27. if(i+1<sideNum): 28. l=((side[i][0][0]-side[i+1][0][0])**2+(side[i][0][1]-side[i+1][0][1])**2)**(1/2) 29. ktemp=k_count(side[i][0][0],side[i][0][1],side[i+1][0][0],side[i+1][0][1]) 30. else: 31. l=((side[i][0][0]-side[0][0][0])**2+(side[i][0][1]-side[0][0][1])**2)**(1/2) 32. ktemp=k_count(side[i][0][0],side[i][0][1],side[0][0][0],side[0][0][1]) 33. length.append(l) 34. k
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。