经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 树莓派 » 查看文章
python3 树莓派 + usb摄像头 做颜色识别 二维码识别
来源:cnblogs  作者:晓风小峰  时间:2019/4/2 8:48:46  对本文有异议

今天又啥也没干 我完蛋了哦  就是没办法沉下心来,咋办。。。。还是先来条NLP吧。。

七,凡事必有至少三个解决方法

  对事情只有一个方法的人,必陷入困境,因为别无选择。

  对事情有两个方法的人也陷入困境,因为他制造了左右两难,进退维谷的局面给自己。

  有第三个方法的人,通常会找到第四,五个方法,甚至更多的方法。

  有选择就是有能力,所以,有选择总比没有选择好。

  至今不成功,只是说至今用过的方法都得不到想要的效果。

  没有办法,只是说已知的办法都行不通。

  世界上尚有很多我们过去没有想过,或者尚未认识的方法。

  只有相信尚有未知的有效方法,才会有机会找到它和使事情改变。

  不论什么事情,我们总有选择的权利,而且不只是一个。

  “没有办法”使事情画上句号,“总有办法”使事情有突破的可能。

  “没有办法”对你没有好处,应停止想它;“总有办法”对你有好处,故应把它留在脑中。

   为何不使自己成为第一个找出办法的人?


 

额。。。纯粹就是今天没得写的了,只好丢点以前写的抠脚程序,也不能叫程序,只能实现功能吧。。。也是东抄点,西抄点,然后一拼来的。。。。。

用的树莓派3B+  然后插个usb摄像头  就行了

文件名:colorList.py   这是颜色库。。。

  1. 1 # -*- coding:UTF-8 -*-
  2. 2 import numpy as np
  3. 3 import collections
  4. 4
  5. 5
  6. 6 def getColorList():
  7. 7 dict = collections.defaultdict(list)
  8. 8
  9. 9 # black
  10. 10 lower_black = np.array([0, 0, 0])
  11. 11 upper_black = np.array([180, 255, 46])
  12. 12 color_list_black = []
  13. 13 color_list_black.append(lower_black)
  14. 14 color_list_black.append(upper_black)
  15. 15 dict['black'] = color_list_black
  16. 16
  17. 17 # gray
  18. 18 lower_gray = np.array([0, 0, 46])
  19. 19 upper_gray = np.array([180, 43, 220])
  20. 20 color_list_gray= []
  21. 21 color_list_gray.append(lower_gray)
  22. 22 color_list_gray.append(upper_gray)
  23. 23 dict['gray'] = color_list_gray
  24. 24
  25. 25 # white
  26. 26 lower_white = np.array([0, 0, 221])
  27. 27 upper_white = np.array([180, 30, 255])
  28. 28 color_list_white = []
  29. 29 color_list_white.append(lower_white)
  30. 30 color_list_white.append(upper_white)
  31. 31 dict['white'] = color_list_white
  32. 32
  33. 33 # red
  34. 34 lower_red = np.array([156, 43, 46])
  35. 35 upper_red = np.array([180, 255, 255])
  36. 36 color_list_red = []
  37. 37 color_list_red.append(lower_red)
  38. 38 color_list_red.append(upper_red)
  39. 39 dict['red'] = color_list_red
  40. 40
  41. 41 # red2
  42. 42
  43. 43 lower_red = np.array([0, 43, 46])
  44. 44 upper_red = np.array([10, 255, 255])
  45. 45 color_list_red2 = []
  46. 46 color_list_red2.append(lower_red)
  47. 47 color_list_red2.append(upper_red)
  48. 48 dict['red2'] = color_list_red2
  49. 49
  50. 50 # orange
  51. 51 lower_orange = np.array([11, 43, 46])
  52. 52 upper_orange = np.array([25, 255, 255])
  53. 53 color_list_orange = []
  54. 54 color_list_orange.append(lower_orange)
  55. 55 color_list_orange.append(upper_orange)
  56. 56 dict['orange'] = color_list_orange
  57. 57
  58. 58 # yellow
  59. 59 lower_yellow = np.array([26, 43, 46])
  60. 60 upper_yellow = np.array([34, 255, 255])
  61. 61 color_list_yellow = []
  62. 62 color_list_yellow.append(lower_yellow)
  63. 63 color_list_yellow.append(upper_yellow)
  64. 64 dict['yellow'] = color_list_yellow
  65. 65
  66. 66 # green
  67. 67 lower_green = np.array([35, 43, 46])
  68. 68 upper_green = np.array([77, 255, 255])
  69. 69 color_list_green = []
  70. 70 color_list_green.append(lower_green)
  71. 71 color_list_green.append(upper_green)
  72. 72 dict['green'] = color_list_green
  73. 73
  74. 74 # cyan
  75. 75 lower_cyan = np.array([78, 43, 46])
  76. 76 upper_cyan = np.array([99, 255, 255])
  77. 77 color_list_cyan = []
  78. 78 color_list_cyan.append(lower_cyan)
  79. 79 color_list_cyan.append(upper_cyan)
  80. 80 dict['cyan'] = color_list_cyan
  81. 81
  82. 82 # blue
  83. 83 lower_blue = np.array([100, 43, 46])
  84. 84 upper_blue = np.array([124, 255, 255])
  85. 85 color_list_blue = []
  86. 86 color_list_blue.append(lower_blue)
  87. 87 color_list_blue.append(upper_blue)
  88. 88 dict['blue'] = color_list_blue
  89. 89
  90. 90 # purple
  91. 91 lower_purple = np.array([125, 43, 46])
  92. 92 upper_purple = np.array([155, 255, 255])
  93. 93 color_list_purple = []
  94. 94 color_list_purple.append(lower_purple)
  95. 95 color_list_purple.append(upper_purple)
  96. 96 dict['purple'] = color_list_purple
  97. 97
  98. 98 return dict
  99. 99
  100. 100
  101. 101 if __name__ == '__main__':
  102. 102 color_dict = getColorList()
  103. 103 print(color_dict)
  104. 104
  105. 105 num = len(color_dict)
  106. 106 print('num=', num)
  107. 107
  108. 108 for d in color_dict:
  109. 109 print('key=', d)
  110. 110 print('value=', color_dict[d][1])

然后是 xf_color.py  这就能识别颜色了 (这是识别以有图片文件版的)  原理就是用上面的色库 算出图片颜色面积  哪个最大 就算是啥颜色。。。抠脚。。。

  1. # -*- coding:UTF-8 -*-
  2. import cv2
  3. import colorList
  4. def get_color(frame):
  5. print('go in get_color')
  6. hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
  7. maxsum = 0
  8. color = None
  9. color_dict = colorList.getColorList()
  10. for d in color_dict:
  11. mask = cv2.inRange(hsv, color_dict[d][0], color_dict[d][1])
  12. # cv2.imwrite(d + ".png", mask)
  13. binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]
  14. binary = cv2.dilate(binary, None, iterations=2)
  15. # cv2.imwrite(d +"1.png", binary)
  16. cnts, hiera = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  17. sum = 0
  18. for c in cnts:
  19. sum += cv2.contourArea(c)
  20. # print("%s , %d" %(d, sum ))
  21. if sum > maxsum:
  22. maxsum = sum
  23. color = d
  24. return color
  25. if __name__ == '__main__':
  26. filename = "./images/test_yellow.png"
  27. frame = cv2.imread(filename)
  28. print(get_color(frame))

文件名:xf_realize.py    这是用摄像头来识别颜色。。。就是加了个拍照功能  哦对 只返回红绿蓝三种颜色,因为搬的物料就是这三种颜色  懒得改了。。

  1. # -*- coding:UTF-8 -*-
  2. import cv2
  3. import xf_color
  4. def videox():
  5. vix = cv2.VideoCapture(0)
  6. while True:
  7. ret, tu = vix.read()
  8. cv2.imshow("take_photo", tu)
  9. cv2.waitKey(1)
  10. cv2.imwrite("color.png", tu)
  11. filename = cv2.imread("color.png")
  12. color = xf_color.get_color(filename)
  13. if color == "red" or color == "red2":
  14. print("red")
  15. result = "1"
  16. break
  17. elif color == "green":
  18. print("green")
  19. result = "2"
  20. break
  21. elif color == "blue":
  22. print("blue")
  23. result = "3"
  24. break
  25. vix.release()
  26. cv2.destroyAllWindows()
  27. return result
  28. if __name__ == '__main__':
  29. videox()

接下来是识别二维码的(有二维码图片文件)  文件名: xf_scance.py

  1. # -*- coding:UTF-8 -*-
  2. import pyzbar.pyzbar as pyzbar
  3. from PIL import Image, ImageEnhance
  4. def scance():
  5. image = "photo.png"
  6. img = Image.open(image)
  7. # img = ImageEnhance.Brightness(img).enhance(2.0) # 增加亮度
  8. #
  9. # img = ImageEnhance.Sharpness(img).enhance(17.0) # 锐利化
  10. #
  11. img = ImageEnhance.Contrast(img).enhance(4.0) # 增加对比度
  12. #
  13. img = img.convert('L') # 灰度化
  14. barcodes = pyzbar.decode(img)
  15. for barcode in barcodes:
  16. barcodeData = barcode.data.decode("utf-8")
  17. return barcodeData
  18. if __name__ == '__main__':
  19. scance()

再来个摄像头扫二维码的:

  1. # -*- coding:UTF-8 -*-
  2. import cv2
  3. import xf_scance
  4. def videox():
  5. vix = cv2.VideoCapture(0)
  6. while True:
  7. ret, tu = vix.read()
  8. cv2.imshow("take_photo", tu)
  9. cv2.waitKey(1)
  10. cv2.imwrite("photo.png", tu)
  11. result = xf_scance.scance()
  12. if result:
  13. # print(result)
  14. break
  15. vix.release()
  16. cv2.destroyAllWindows()
  17. return result
  18. if __name__ == '__main__':
  19. r = videox()
  20. print(r)

 

原文链接:http://www.cnblogs.com/xf1262048067/p/10640050.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号