Logstash 方法 联合主键 存量客户 function asynchronous mobile service download Material UI underscorejs jScroll vue框架 matlab跳出for循环 plsql连接mysql数据库 二分查找python python字典类型 python编程教程 python怎么配置环境 python可视化编程 java自学编程入门教程 java调用接口 java文件删除 java创建文件夹 java接口调用 javalist数组 linux服务器登录 flash实例教程 win10长期服务版 选项卡 怎么设置迅雷为默认下载器 自动答题软件 JScodeblocks汉化包 掌门一对一下载 脚本编程 ug拔模 qq制作网页 flushdns oracle游标 例外被抛出且未被接住
当前位置: 首页 > 学习教程  > python

opencv02

2021/2/8 12:55:25 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

图像的基础操作,色彩空间 笔记 之前学过一点写在下面了: 图像数字化 就写一下补充: 色彩空间 Opencv中常用的颜色空间就三种BGR、HSV、灰度。 颜色空间转换 ​ 在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会 发现…

图像的基础操作,色彩空间

笔记

之前学过一点写在下面了:
图像数字化
就写一下补充:
在这里插入图片描述

色彩空间

Opencv中常用的颜色空间就三种BGR、HSV、灰度。

颜色空间转换

​ 在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会 发现我们经常用到的也就两种:BGR↔Gray 和 BGR↔HSV。

​ 我们要用到的函数是:cv.cvtColor(input_image,flag),其中 flag 就是转换类型。

​ 对于 BGR↔Gray 的转换,我们要使用的 flag 就是cv.COLOR_BGR2GRAY。 同样对于 BGR↔HSV 的转换,我们用的 flag 就是 cv.COLOR_BGR2HSV。 你还可以通过下面的命令得到所有可用的 flag。(前面是转化前后面是转化后中间2)
Note:在 OpenCV 的 HSV 格式中,H(色彩/色度)的取值范围是 [0,179], S(饱和度)的取值范围 [0,255],V(亮度)的取值范围 [0,255]。但是不 同的软件使用的值可能不同。所以当你需要拿 OpenCV 的 HSV 值与其他软 件的 HSV 值进行对比时,一定要记得归一化(按比例统一)。

物体跟踪

​ 现在我们知道怎样将一幅图像从 BGR 转换到 HSV 了,我们可以利用这 一点来提取带有某个特定颜色的物体。在 HSV 颜色空间中要比在 BGR 空间 中更容易表示一个特定颜色。在我们的程序中,我们要提取的是一个蓝色的物 体。下面就是就是我们要做的几步:

从视频中获取每一帧图像
将图像转换到 HSV 空间
设置 HSV 阈值到蓝色范围。
获取蓝色物体,当然我们还可以做其他任何我们想做的事,比如:在蓝色 物体周围画一个圈。
代码如下:

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
    # Take each frame
    _, frame = cap.read()
    # Convert BGR to HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    # define range of blue color in HSV
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
    # Threshold the HSV image to get only blue colors
    mask = cv.inRange(hsv, lower_blue, upper_blue)
    # Bitwise-AND mask and original image
    res = cv.bitwise_and(frame,frame, mask= mask)
    cv.imshow('frame',frame)
    cv.imshow('mask',mask)
    cv.imshow('res',res)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

在这里插入图片描述

green = np.uint8([[[0,255,0 ]]])
hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
print( hsv_green )
[[[ 60 255 255]]]

​ 通过计算程序执行时间判断程序性能:

​ cv.getTickCount 函数返回从参考点到这个函数被执行的时钟数。所 以当你在一个函数执行前后都调用它的话,你就会得到这个函数的执行时间 (时钟数)。cv.getTickFrequency返回时钟频率,或者说每秒钟的时钟数。所以 你可以按照下面的方式得到一个函数运行了多少秒:

e1 = cv.getTickCount()
# your code execution
e2 = cv.getTickCount()
time = (e2 - e1)/ cv.getTickFrequency()

感觉没什么用

思考题

HSV和BGR三原色在图片信息存储的差别在哪?
呃BGR是把三种原色分开来,数值代表亮度,然后叠加,HSV将颜色,饱和度(不了解),亮度剥离出来,可能对于某些操作更方便。

练习题

1.编写一段程序实现以下功能:
代码调用电脑摄像头,寻找视野中任意颜色(自定)并具有一定大小的物体,并用矩形框处,最后显示在图像上;

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(r'C:\Users\19583\Desktop\3.mp4')
while(1):
    # Take each frame
    _, frame = cap.read()
    # Convert BGR to HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    # define range of blue color in HSV
    lower_blue = np.array([42,43,46])
    upper_blue = np.array([77,255,255])
    # Threshold the HSV image to get only blue colors
    mask = cv.inRange(hsv, lower_blue, upper_blue)
    # Bitwise-AND mask and original image
    res = cv.bitwise_and(frame,frame, mask= mask)
    res=cv.resize(res,(500,500))
    gj1=res[:,:,0].copy()#分离出色彩通道
# 腐蚀除去那些零散的绿点
    ke=np.ones((5,5),dtype=int)
    res=cv.erode(res,ke,iterations=3)
    gj1 = cv.erode(gj1, ke, iterations=3)
    d1x=0
    d1y=0
    d2x=0
    d2y=0
    for i in range(gj1.shape[0]):#遍历图像找到临界的两个点的坐标,并用他们画矩形
        flag=0
        for j in range(gj1.shape[1]):
            if gj1[i][j]>0:
                flag=1
        if flag==1:
            d1y=i
            break
    for i in range(gj1.shape[0]-1,0,-1):
        flag=0
        for j in range(gj1.shape[1]):
            if gj1[i][j]>0:
                flag=1
        if flag==1:
            d2y=i
            break
    for i in range(gj1.shape[1]):
        flag=0
        for j in range(gj1.shape[0]):
            if gj1[j][i]>0:
                flag=1
        if flag==1:
            d1x=i
            break
    for i in range(gj1.shape[0]-1,0,-1):
        flag=0
        for j in range(gj1.shape[1]):
            if gj1[j][i]>0:
                flag=1
        if flag==1:
            d2x=i
            break
    cv.rectangle(res,(d1x,d1y),(d2x,d2y),(255,0,0))
    fourcc = cv.VideoWriter_fourcc(*'XVID')#保存
    out = cv.VideoWriter(r'C:\Users\19583\Desktop\output.avi', fourcc, 20.0, (640, 480))
    out.write(res)
    cv.imshow('frame',frame)
    #cv.imshow('mask',mask)
    cv.imshow('res',res)
    k = cv.waitKey(50) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_2000358.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?