1.Ubutu自带python3.6环境 2.安装opencv,参考博客ubuntu 18.04 上安装opencv【全程】_forever_008的博客-CSDN博客_ubuntu18.04安装opencv 注:如果Ubuntu下载包太慢可以在windows下下载好直接拉到ubuntu中然后再进行编译。 3.安装aruco,只需要安装opencv-contrib-python这个库,aruco包放在这个库里面,参考博客OpenCV-Aruco模块调用 [python版]_ShakalakaPHD的博客-CSDN博客 或者参考https://pypi.org/project/opencv-contrib-python/(这是官网安装步骤) 4.标定摄像头,得到摄像头参数.下载aruco包安装,下载编译参考博客基于opencv的ArUco的视觉定位之ArUco安装_share space的博客-CSDN博客_aruco opencv 标定摄像头参考博客ArUco 相机校准(from images)_gaiyonghuming110的博客-CSDN博客 5.Aruco码识别:注:aruco中会涉及到aruco码预定义字典的使用, Aruco字典介绍:DICT_6X6_250中,6x6表示的是边为6个方块的二维码,250则表示这个字典中有250个码。查看DICT_6X6_250的类型为“int”,然后直接输出DICT_6X6_250会得到一个数字,这样在加载与定义字典的时候可以直接使用这个数字,
因此加载与定义字典DICT_6X6_250就可以用10代替,这一步很重要,这样可以用一个for循环将所有的字典同时调用起来。 代码参考博客玩了下opencv的aruco(python版)_weixin_30617695的博客-CSDN博客,加上自己的修改,得到以下代码。 Aruco在电脑上识别参考代码: import time import cv2 from cv2 import aruco
cap = cv2.VideoCapture(0) ret, frame = cap.read()#le ret: while True: ret, frame = cap.read()# h1, w1 = frame.shape[:2]#frame.shape[ : 2] 表示取彩色图片的长、宽,frame.shape[ : 3] 则表示取彩色图片的长、宽、通道。
# 读取摄像头画面
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
for i in range(16):
aruco_dict = aruco.Dictionary_get(i)# i表示所有的预装字典,用数字表示出来,方便使用
parameters = aruco.DetectorParameters_create()
corners, ids, rejectedImgPoints = aruco.detectMarkers(gray,
aruco_dict,
parameters=parameters)
aruco.drawDetectedMarkers(frame, corners, ids)
#cv2.putText(frame,)
if ids is not None:
print('id:'+str(ids))
cv2.imshow("frame", frame)
key = cv2.waitKey(1)
if key == 27: # 按esc键退出
print('esc break...')
cap.release()
cv2.destroyAllWindows()
break
#if key == ord(' '): # 按空格键保存
# num = num + 1
# filename = "frames_%s.jpg" % num # 保存一张图像
#filename = str(time.time())[:10] + ".jpg"
#cv2.imwrite(filename, frame)
解决错误: 1.pip install 时报错 ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问(已解决) 参考博客pip install 时报错 ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问(已解决)_小小白学计算机的博客-CSDN博客 2小车上识别二维码,小车上获得的是原图,因此需要进行镜像转换,参考代码:
import time import numpy as np import cv2 from cv2 import aruco cap = cv2.VideoCapture(0) ret, frame = cap.read() while ret: ret, frame = cap.read() picture=cv2.flip(frame,1)#图片镜像转换 h1, w1 = picture.shape[:2]
gray = cv2.cvtColor(picture, cv2.COLOR_BGR2GRAY)
#for i in range(16):
aruco_dict = aruco.Dictionary_get(3)
parameters = aruco.DetectorParameters_create()
corners, ids, rejectedImgPoints = aruco.detectMarkers(gray,
aruco_dict,
parameters=parameters)
aruco.drawDetectedMarkers(picture, corners, ids)
#cv2.putText(frame,)
if ids is not None:
print('id:'+str(ids))
cv2.imshow("frame", picture)
key = cv2.waitKey(1)
if key == 27: #
print('esc break...')
cap.release()
cv2.destroyAllWindows()
break
#if key == ord(' '):
# num = num + 1
# filename = "frames_%s.jpg" % num #
# filename = str(time.time())[:10] + ".jpg"
# cv2.imwrite(filename, frame)
Ros工作空间创建、节点编写参考博客ROS 发布消息和订阅消息 for Python_Coxhuang的博客-CSDN博客_python订阅ros消息
|