对于刚接触计算机视觉的同学来说,搭建一个稳定的OpenCV Python开发环境是首要任务。我推荐使用Anaconda作为Python环境管理器,它能有效解决不同项目间的依赖冲突问题。
安装OpenCV最稳妥的方式是通过pip安装官方预编译版本:
bash复制pip install opencv-python
如果需要额外模块(如contrib模块),则安装:
bash复制pip install opencv-contrib-python
注意:不要同时安装opencv-python和opencv-contrib-python,这会导致冲突。如果已经安装错误,需要先彻底卸载再重新安装。
验证安装是否成功:
python复制import cv2
print(cv2.__version__)
我强烈建议配合Jupyter Notebook使用OpenCV进行学习,它能实时显示图像处理结果。安装命令:
bash复制pip install jupyterlab
OpenCV读取图像的基本操作:
python复制img = cv2.imread('image.jpg', cv2.IMREAD_COLOR)
cv2.imshow('Window Title', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这里有几个关键点需要注意:
OpenCV默认使用BGR格式,而大多数其他库使用RGB。转换方法:
python复制rgb_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2RGB)
对于色块追踪,HSV色彩空间往往更有效:
python复制hsv_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2HSV)
虽然原文提到Canny边缘检测的局限性,但它仍然是基础中的基础。标准用法:
python复制edges = cv2.Canny(image, threshold1, threshold2)
阈值选择有讲究:
我常用的调参技巧是先用滑动条交互式调整:
python复制cv2.createTrackbar('Threshold1', 'window', 0, 255, nothing)
cv2.createTrackbar('Threshold2', 'window', 0, 255, nothing)
查找轮廓的基本流程:
python复制contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
轮廓分析常用方法:
python复制for cnt in contours:
area = cv2.contourArea(cnt)
x,y,w,h = cv2.boundingRect(cnt)
aspect_ratio = float(w)/h
原文提到的色块追踪确实是更鲁棒的方法。HSV阈值设定步骤:
python复制color = np.uint8([[[b,g,r]]])
hsv_color = cv2.cvtColor(color, cv2.COLOR_BGR2HSV)
python复制lower = np.array([h-10, 100, 100])
upper = np.array([h+10, 255, 255])
二值化后通常需要形态学处理:
python复制kernel = np.ones((5,5), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
python复制roi = img[y1:y2, x1:x2]
在资源受限的设备上:
我在实际项目中最大的体会是:不要过早追求复杂算法,把基础图像处理技术掌握扎实,往往能解决80%的实际问题。特别是在机器人竞赛中,稳定可靠的色块追踪比时灵时不灵的深度学习模型更实用。