返回顶部
首页 > 资讯 > 精选 >怎么用opencv判断多种颜色小球的形状及位置
  • 740
分享到

怎么用opencv判断多种颜色小球的形状及位置

2023-07-04 14:07:50 740人浏览 安东尼
摘要

这篇文章主要介绍了怎么用OpenCV判断多种颜色小球的形状及位置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用opencv判断多种颜色小球的形状及位置文章都会有所收获,下面我们一起来看看吧。一、openc

这篇文章主要介绍了怎么用OpenCV判断多种颜色小球的形状及位置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用opencv判断多种颜色小球的形状及位置文章都会有所收获,下面我们一起来看看吧。

    一、opencv是什么?

    OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库.

    二、使用步骤

    1.引入库

    代码如下:

    import cv2import numpy as np

    2.设置颜色阈值

    代码如下:

    #颜色阈值low_red = np.array([100, 100, 60])up_red = np.array([180, 255, 255])low_green = np.array([35, 43, 46])up_green = np.array([77, 255, 255])low_blue = np.array([90, 110, 110])up_blue = np.array([124, 255, 255])#记录形状xz = {}

    字典xz是待会记录形状用的

    3.对图片进行加载和处理

    代码如下:

    if __name__ == '__main__':    image = cv2.imread('img_1.png')#读取图像    image = cv2.resize(image, (500, 500))#重新裁剪图像    #image = cv2.GaussianBlur(image, (11, 11), 0)#高斯滤波    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)    color_read(hsv, image)#处理图片的函数    cv2.imshow('image', image)    cv2.waiTKEy(0)    cv2.destroyAllwindows()

    4.处理图片的函数

    代码如下:

    def color_read(hsv, image):    global xz    blue = get_image(hsv, low_blue, up_blue)#使用获取颜色空间的函数进行颜色获取三种颜色    red = get_image(hsv, low_red, up_red)    green = get_image(hsv, low_green, up_green)    mask = blue + red + green    #寻找图像的轮廓    cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]    print('cnts:', len(cnts))    ##先判断形状再画轮廓    for cnt in cnts:        area = cv2.contourArea(cnt)#计算轮廓的面积        print('area:', area)        if area > 1000:            epsilon = 0.04 * cv2.arcLength(cnt, True)#计算轮廓长度            approx = cv2.approxPolyDP(cnt, epsilon, True)#计算轮廓角点            corners = len(approx)            print(corners)            #根据角点的个数判断形状            if corners == 3:                a = '三角形'                b = approx[0][0][0]  # 根据三角形的角点判断位置                xz[a] = b                area, trgl = cv2.minEnclosingTriangle(cnt)#寻找三角形的轮廓                # 绘制三角形轮廓                for i in range(0, 3):                    cv2.line(image, tuple(trgl[i][0]), tuple(trgl[(i + 1) % 3][0]), (0, 255, 0), 2)            elif corners == 4:                a = '矩形'                b = approx[0][0][0]                xz[a] = b                x, y, w, h = cv2.boundingRect(cnt)#寻找矩形轮廓                cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)#绘制矩形轮廓                            else:            #圆形这里是处理的不好的地方所以我没有用变量x1和z,因为画出来的轮廓有点大                a = '圆'                b = approx[0][0][0]                xz[a] = b                ((x1, y1), z) = cv2.minEnclosinGCircle(cnt)#寻找圆形轮廓                x1 = int(x1)                y1 = int(y1)                z = int(z)                cv2.circle(image, (150, y1), 60, (0, 255, 0), 2)#绘制圆形轮廓

    5.获取颜色空间函数

    代码如下:

    #获取图像hsv的方法def get_image(hsv, low, up):    mask = cv2.inRange(hsv, low, up)#获取色彩空间    mask = cv2.erode(mask, None, 2)#腐蚀操作    mask = cv2.dilate(mask, None, 2)#膨胀操作    return mask

    6.完整代码

    #获取图像hsv的方法import cv2import numpy as np#颜色阈值low_red = np.array([100, 100, 60])up_red = np.array([180, 255, 255])low_green = np.array([35, 43, 46])up_green = np.array([77, 255, 255])low_blue = np.array([90, 110, 110])up_blue = np.array([124, 255, 255])#记录形状xz = {}#获取图像hsv的方法def get_image(hsv, low, up):    mask = cv2.inRange(hsv, low, up)#获取色彩空间    mask = cv2.erode(mask, None, 2)#腐蚀操作    mask = cv2.dilate(mask, None, 2)#膨胀操作    return mask#获取轮廓def color_read(hsv, image):    global xz    blue = get_image(hsv, low_blue, up_blue)#使用获取颜色空间的函数进行颜色获取三种颜色    red = get_image(hsv, low_red, up_red)    green = get_image(hsv, low_green, up_green)    mask = blue + red + green    #寻找图像的轮廓    cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]    print('cnts:', len(cnts))    ##先判断形状再画轮廓    for cnt in cnts:        area = cv2.contourArea(cnt)#计算轮廓的面积        print('area:', area)        if area > 1000:            epsilon = 0.04 * cv2.arcLength(cnt, True)#计算轮廓长度            approx = cv2.approxPolyDP(cnt, epsilon, True)#计算轮廓角点            corners = len(approx)            print(corners)            #根据角点的个数判断形状            if corners == 3:                a = '三角形'                b = approx[0][0][0]  # 根据三角形的角点判断位置                xz[a] = b                area, trgl = cv2.minEnclosingTriangle(cnt)#寻找三角形的轮廓                # 绘制三角形轮廓                for i in range(0, 3):                    cv2.line(image, tuple(trgl[i][0]), tuple(trgl[(i + 1) % 3][0]), (0, 255, 0), 2)            elif corners == 4:                a = '矩形'                b = approx[0][0][0]                xz[a] = b                x, y, w, h = cv2.boundingRect(cnt)#寻找矩形轮廓                cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)#绘制矩形轮廓            else:                a = '圆'                b = approx[0][0][0]                xz[a] = b                ((x1, y1), z) = cv2.minEnclosingCircle(cnt)#寻找圆形轮廓                x1 = int(x1)                y1 = int(y1)                z = int(z)                cv2.circle(image, (150, y1), 60, (0, 255, 0), 2)#绘制圆形轮廓if __name__ == '__main__':    image = cv2.imread('img_1.png')#读取图像    image = cv2.resize(image, (500, 500))#重新裁剪图像    #image = cv2.GaussianBlur(image, (11, 11), 0)#高斯滤波    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)    color_read(hsv, image)#处理图片的函数    cv2.imshow('image', image)    cv2.waitKey(0)    cv2.destroyAllWindows()    #对拿到的小球字典位置数据进行处理    xz[min(xz, key=xz.get)] = 1    xz[max(xz, key=xz.get)] = 3    xz[max(xz, key=xz.get)] = 2    xz = sorted(xz.items(), key=lambda x: x[1], reverse=False)    xz = dict(xz)    print(xz)

    关于“怎么用opencv判断多种颜色小球的形状及位置”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么用opencv判断多种颜色小球的形状及位置”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

    --结束END--

    本文标题: 怎么用opencv判断多种颜色小球的形状及位置

    本文链接: https://lsjlt.com/news/345630.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 怎么用opencv判断多种颜色小球的形状及位置
      这篇文章主要介绍了怎么用opencv判断多种颜色小球的形状及位置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用opencv判断多种颜色小球的形状及位置文章都会有所收获,下面我们一起来看看吧。一、openc...
      99+
      2023-07-04
    • opencv对多种颜色小球的形状及位置判断方式
      目录一、opencv是什么?二、使用步骤1.引入库2.设置颜色阈值3.对图片进行加载和处理4.处理图片的函数5.获取颜色空间函数6.运行效果7.完整代码总结一、opencv是什么? ...
      99+
      2022-11-13
      opencv小球的形状 opencv小球位置 opencv小球位置判断
    • 使用Opencv怎么判断颜色相似的图片
      本篇文章给大家分享的是有关使用Opencv怎么判断颜色相似的图片,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。问题描述有一个项目,大体是要判断一下一篇文章内的配图突不突兀。素材...
      99+
      2023-06-07
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作