OPENCV的GUI特性:图像入门
我们先来理解一下什么是GUI特性;一起来学习摘自百度词条的信息:
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。
这样来说,在以往的计算机显示界面中,都是信息的展示,也就是说展示出来的界面不是像现在这样的图形化,对于创作者来说减轻了工作的负担,但却加大了使用者对其的理解。所以,为了让计算机界面更加人性化,程序员是有必要学习GUI特性。
点击这里查看更多内容:百度词条:GUI特性
target
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))
相关文章
- Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
- Opencv学习笔记 离散傅立叶变换(DFT)简介及用于图片方向校正
- Opencv学习笔记 - OpenCV 4机器学习算法简介
- OpenCV CEO教你用OAK(一):OAK和DepthAI入门
- [转] Matlab与C++混合编程,添加OpenCV库
- 成功解决OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor
- C++ opencv入门学习
- OpenCV 加载 ONNX 模型
- 在OpenCV里实现联合双边滤波
- 关于OpenCV for Python入门之Dlib实现人脸检测
- OPENCV的GUI特性:轨迹栏作为调色板
- OpenCV入门(二十九)快速学会OpenCV 28 K均值聚类
- OpenCV入门(二十二)快速学会OpenCV 21 图像轮廓
- OpenCV入门(二十一)快速学会OpenCV 20 图像金字塔
- OpenCV入门(二十)快速学会OpenCV 19 对象测量
- OpenCV入门(十八)快速学会OpenCV 17 直线检测
- OpenCV入门(十六)快速学会OpenCV 15 图像分割
- OpenCV入门(五)快速学会OpenCV4文字绘制&边界填充
- OpenCV入门(三)快速学会OpenCV2图像处理基础(一)
- OpenCV-PyQT项目实战(2)QtDesigner 和 PyUIC 快速入门
- 转:使用 opencv 将图片压缩到指定文件尺寸
- 【OpenCV 例程200篇】82. 频率域巴特沃斯低通滤波器
- opencv视频处理入门
- opencv图像处理入门
- 一招解决报错error: OpenCV(4.2.0) C:projectsopencv-pythonopencvmodulesobjdetectsrccascadedetect.cpp
- Python基于OpenCV的异常行为检测系统[源码&部署教程]