欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

python opencv 轮廓检测,opencv 轮廓查找

终极管理员 知识笔记 1619阅读

文章目录 概要代码运行结果

概要

一些理论知识

OpenCV形态学操作理论1
OpenCV形态学操作理论2
OpenCV轮廓操作|轮廓类似详解

代码

代码如下可以直接运行

import cv2 as cv# 定义结构元素kernel  cv.getStructuringElement(cv.MORPH_RECT, (3, 3))# print kernelcapture  cv.VideoCapture(0)print (capture.isOpened())ok, frame  capture.read()lower_b  (65, 43, 46)upper_b  (110, 255, 255)height, width  frame.shape[0:2]screen_center  width / 2offset  50while ok:    # 将图像转成HSV颜色空间    hsv_frame  cv.cvtColor(frame, cv.COLOR_BGR2HSV)    # 基于颜色的物体提取    mask  cv.inRange(hsv_frame, lower_b, upper_b)    mask2  cv.morphologyEx(mask, cv.MORPH_OPEN, kernel)    mask3  cv.morphologyEx(mask2, cv.MORPH_CLOSE, kernel)    # 找出面积最大的区域    contours,_  cv.findContours(mask3, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)    maxArea  0    maxIndex  0    for i, c in enumerate(contours):        area  cv.contourArea(c)    if area > maxArea:        maxArea  area    maxIndex  i    # 绘制    cv.drawContours(frame, contours, maxIndex, (255, 255, 0), 2)    # 获取外切矩形    x, y, w, h  cv.boundingRect(contours[maxIndex])    cv.rectangle(frame, (x, y), (x  w, y  h), (255, 0, 0), 2)    # 获取中心像素点    center_x  int(x  w / 2)    center_y  int(y  h / 2)    cv.circle(frame, (center_x, center_y), 5, (0, 0, 255), -1)    # 简单的打印反馈数据之后补充运动控制    if center_x < screen_center - offset:        print (turn left)    elif screen_center - offset < center_x < screen_center  offset:        print (keep)    elif center_x > screen_center  offset:        print (turn right)    cv.imshow(mask4, mask3)    cv.imshow(frame, frame)    cv.waitKey(1)    ok, frame  capture.read()
运行结果



标签:
声明:无特别说明,转载请标明本文来源!