zl程序教程

您现在的位置是:首页 >  后端

当前栏目

OPENCV的GUI特性:图像入门

Opencv入门 图像 特性 GUI
2023-09-14 09:12:45 时间

我们先来理解一下什么是GUI特性;一起来学习摘自百度词条的信息:

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 

图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。 

这样来说,在以往的计算机显示界面中,都是信息的展示,也就是说展示出来的界面不是像现在这样的图形化,对于创作者来说减轻了工作的负担,但却加大了使用者对其的理解。所以,为了让计算机界面更加人性化,程序员是有必要学习GUI特性。 

 点击这里查看更多内容:百度词条:GUI特性


target

1、读取图像,显示图像,写入图像

2、Matplotlib显示图像

3、常用颜色空间转换


1、读取图像,显示图像,写入图像

(1)读取图像

使用**cv.imread**()函数读取图像。

第一个参数:“a.完整路径;b.本项目路径下可以只写图片的命名”

第二个参数:指定了读取图像的方式

  • cv.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。
  • cv.IMREAD_GRAYSCALE:以灰度模式加载图像
  • cv.IMREAD_UNCHANGED:加载图像,包括alpha通道

注意:这里不需要记,我们可以简单的传入三个整数1、0或-1

参考下面的代码:

#加载彩色灰度图像
import numpy as np
import cv2 as cv

img = cv.imread('1.jpg',0)

(2)显示图像

使用函数**cv.imshow()**在窗口中显示图像。

第一个参数:窗口名称,字符串形式。

第二个参数:显示的对象

import cv2 as cv

cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()

cv.waitKey()是一个键盘绑定函数,其参数是以毫秒为单位的时间。简单来说——传入0,可以让窗口不消失。

cv.destroyAllWindows()在其中传递确切的窗口名称作为参数,销毁特定的窗口。

(3)写入图像

使用函数**cv.imwrite**()保存图像。

第一个参数:文件名,

第二个参数:要保存的图像。

比如:

cv.imwrite("2.jpg",img)

图像将会以jpg格式保存到当前项目的目录下。

总结

我们来看看下面的程序,包含了上面所讲的所有信息,并且我们要实现敲击Esc键,退出程序,点击键盘“s”,表示保存这个图片。

import cv2
import numpy as np 

img = cv2.imread("1.jpg",0)  #灰度图像转化
cv2.imshow("image",img)
k = cv2.waitkey(0) & 0xFF
if k == 27:
    cv2.destroyAllWindows()
    #break
elif k == ord('s'):
    cv2.imwrite("2.png",img)
    cv2.destroyAllWindows

如果电脑是64位,就将cv2.waitkey(0)修改成了cv2.waitkey(0) & 0xFF,我想大多数人应该都是64位机吧。


2、使用Matplotlib

Matplotlib是python优秀的第三方绘图库,其中有许多的绘图方法,感兴趣的可以看我的数据分析专栏,其中就有关于Matplotlib的介绍,可点击这里进入,(1条消息) 数据分析_夏天是冰红茶的博客-CSDN博客

import numpy as np
import cv2 
from matplotlib import pyplot as plt

img = cv2.imread("1.jpg",0)
plt.imshow(img,cmap = 'gray',interpolation = 'bicubic')
plt.xticks([]),plt.yticks([])
plt.show()

更多关于Matplotlib的介绍,可以去官网学习。除此之外,强调一点,在Opencv当中加载的色彩图像处于BGR模式,但在Matplotlib是以RGB格式进行加载,所以我们要用到cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

当然你也可以使用plt.show(img[:,:,::-1])的方法


 3、常用颜色空间转换

 在这里只讲BGR<—>灰色,BGR<—>HSV的转化,还有用摄像头提取实时颜色对象。请你知道,Opencv当中其实是由超过150种的颜色空间转换方法,而最为广泛的也就是今天所讲的。

 如果你想了解有哪些方式,可以在环境中输入:

import cv2 as cv
flags = [i for i in dir(cv) if i.startswith('COLOR_')]
print( flags )

注意:HSV的色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]

BGR→灰度转换,我们使用标志cv.COLOR_BGR2GRAY。

BGR→HSV,我们使用标志cv.COLOR_BGR2HSV

(1)对象的追踪

来自文档中的代码

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
    # 读取帧
    _, frame = cap.read()
    # 转换颜色空间 BGR 到 HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    # 定义HSV中蓝色的范围
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
    # 设置HSV的阈值使得只取蓝色
    mask = cv.inRange(hsv, lower_blue, upper_blue)
    # 将掩膜和图像逐像素相加
    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()

如何找到要追踪的HSV值?

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

[[[ 60 255 255]]] 

只需这样,你就可以查找到你想要的BGR值。现在把[H- 10,100,100][H+ 10,255, 255]分别作为下界和上界。除了这个方法之外,你可以使用任何图像编辑工具(如GIMP或任何在线转换器)来查找这些值,但是不要忘记调整HSV范围。

图像通道的拆分与合并

cv中是按B、G、R的通道工作下单独工作:

b,g,r=cv2.split(img)
img=cv2.merge((b,g,r))