OpenCV图像处理GUI功能详解

目录
  • 一、图像入门
    • 1.读取图像
    • 2.显示图像
    • 3.保存图像
  • 二、视频入门
    • 1.用相机捕捉视频
    • 2.播放视频文件
    • 3.保存视频
  • 总结

OpenCV图像处理

一、图像入门

1.读取图像

使用 cv.imread() 函数读取一张图像,图片应该在工作目录中,或者应该提供完整的图像路径。第二个参数是一个 flag,指定了应该读取图像的方式

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

你可以简单地分别传递整数 1、0 或-1,而不是这三个 flag。

import numpy as np
import cv2 as cv
# 用灰度模式加载图像
img = cv.imread('messi5.jpg', 0)

即使图像路径错误,它也不会抛出任何错误,但是打印 img会给你None

2.显示图像

用 cv.imshow() 函数在窗口中显示图像,窗口自动适应图像的大小。

第一个参数是窗口名,它是一个字符串,第二个参数就是我们的图像。你可以根据需要创建任意数量的窗口,但是窗口名字要不同。

cv.imshow('image', img)
cv.waitKey(0)  #毫秒级显示,如果是0就是按下任意按键结束显示
cv.destroyAllWindows()

cv.waitKey() 是一个键盘绑定函数,它的参数是以毫秒为单位的时间。该函数为任意键盘事件等待指定毫秒。如果你在这段时间内按下任意键,程序将继续。如果传的是 0,它会一直等待键盘按下。
cv.destroyAllWindows() 简单的销毁我们创建的所有窗口。如果你想销毁任意指定窗口,应该使用函数 cv.destroyWindow() 参数是确切的窗口名。

import numpy as np
import cv2 as cv
# 用RGB模式加载图像
img = cv.imread('1.jpg', 1)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

也可以同时显示两张图像

有一种特殊情况,你可以先创建一个窗口然后加载图像到该窗口。在这种情况下,你能指定窗口是否可调整大小。它是由这个函数完成的 cv.namedWindow()。默认情况下,flag 是 cv.WINDOW_AUTOSIZE。但如果你指定了 flag 为 cv.WINDOW_NORMAL,你能调整窗口大小。当图像尺寸太大,在窗口中添加跟踪条是很有用的。

import numpy as np
import cv2 as cv
# 用RGB模式加载图像
img = cv.imread('1.jpg', 1)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

可以看到图片可以拉伸,也可以自己去对比一下效果。

3.保存图像

保存图像,用这个函数 cv.imwrite()

第一个参数是文件名,第二个参数是你要保存的图像。

import numpy as np
import cv2 as cv
# 用RGB模式加载图像
img = cv.imread('1.jpg', 1)
cv.imwrite('11.jpg',img)  #将1.jpg保存为11.jpg
cv.namedWindow('image', cv.WINDOW_NORMAL)
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()

图像小结
下面的程序以灰度模式读取图像,显示图像,如果你按下 's‘ 会保存和退出图像,或者按下 ESC 退出不保存。

import numpy as np
import cv2 as cv

img = cv.imread('11.jpg',0)
cv.imshow('image',img)
k = cv.waitKey(0)
if k == 27: # ESC 退出
    cv.destroyAllWindows()
elif k == ord('s'): # 's' 保存退出
    cv.imwrite('m.jpg',img)
    cv.destroyAllWindows()

二、视频入门

1.用相机捕捉视频

通常,我们用相机捕捉直播。OpenCV 为此提供了一个非常简单的接口。我们用相机捕捉一个视频(我用的电脑内置摄像头),将它转换成灰度视频并显示。去获取一个视频,你需要创建一个VideoCapture对象。它的参数可以是设备索引或者一个视频文件名。设备索引仅仅是摄像机编号。通常会连接一台摄像机(as in my case)。所以我只传了 0(或者-1)。你可以通过传 1 来选择第二个摄像机,以此类推。之后,你能逐帧捕获。但是最后,不要忘记释放这个 Capture 对象。

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):
    # 一帧一帧捕捉
    ret, frame = cap.read()
    # 我们对帧的操作在这里
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)  # cv.COLOR_BGR2RG显示彩色图像
    # 显示返回的每帧
    cv.imshow('frame',gray)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
# 当所有事完成,释放 VideoCapture 对象
cap.release()
cv.destroyAllWindows()

cap.read() 返回一个 bool 值(True/False)。如果加载成功,它会返回True。因此,你可以通过这个返回值判断视频是否结束。

2.播放视频文件

它和从相机捕获一样,只需要用视频文件名更改相机索引。同时显示 frame,为 cv.waitKey() 使用合适的时间。如果它太小,视频将非常快,如果太大,视频将很慢 (嗯,这就是如何显示慢动作)。正常情况下,25 毫秒就可以了。

import numpy as np
import cv2 as cv
cap = cv.VideoCapture('FinalVideo_1642014289.728580.MP4')
while(cap.isOpened()):
    ret, frame = cap.read()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2RGB)
    cv.imshow('frame',gray)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv.destroyAllWindows()

视频只有30秒左右,可以看到视频播放速度很快,像是原视频2倍速播放一样。

3.保存视频

我们捕获视频,逐帧处理然后保存下来。对于图像来说,是非常的简单,就用 cv.imwrite()。这里需要做更多的工作。

这次我们创建一个 VideoWriter 对象。我们应该指定输出文件的名字 (例如:output.avi)。然后我们应该指定 FourCC 码。然后应该传递每秒帧数和帧大小。最后一个是 isColor flag。如果是 True,编码器期望彩色帧,否则它适用于灰度帧。

FourCC 是用于指定视频解码器的 4 字节代码。这里 fourcc.org 是可用编码的列表。它取决于平台,下面编码就很好。

In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID 是最合适的. MJPG 结果比较大. X264 结果比较小)
In Windows: DIVX (还需要测试和添加跟多内容)
In OSX: MJPG (.mp4), DIVX (.avi), X264 (.mkv).
对于 MJPG, FourCC 的代码作为 cv.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’) 或 cv.VideoWriter_fourcc(‘MJPG’)* 传递。

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# 声明编码器和创建 VideoWrite 对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv.flip(frame,0)
        # 写入已经翻转好的帧
        out.write(frame)
        cv.imshow('frame',frame)
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
# 释放已经完成的工作
cap.release()
out.release()
cv.destroyAllWindows()

可以看到有avi文件生成。

总结

GUI功能是opencv的入门知识,还是很好理解的。

到此这篇关于OpenCV图像处理——GUI功能的文章就介绍到这了,更多相关OpenCV图像处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python OpenCV图像处理之图像滤波特效详解

    目录 1分类 2邻域滤波 2.1线性滤波 2.2非线性滤波 3频域滤波 3.1低通滤波 3.2高通滤波 1 分类 图像滤波按图像域可分为两种类型: 邻域滤波(Spatial Domain Filter),其本质是数字窗口上的数学运算.一般用于图像平滑.图像锐化.特征提取(如纹理测量.边缘检测)等,邻域滤波使用邻域算子——利用给定像素周围像素值以决定此像素最终输出的一种算子 频域滤波(Frequency Domain Filter),其本质是对像素频率的修改.一般用于降噪.重采样.图像压缩等. 按

  • Java OpenCV图像处理之自定义图像滤波算子

    目录 示例代码 效果图 示例代码 package com.xu.image; import java.io.File; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.highgui.HighGui; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Img

  • Python基于pyopencv人脸识别并绘制GUI界面

    目录 项目介绍 采集人脸: 识别功能: 项目思路 项目模块 1.人脸采集 2.数据训练 3.人脸识别 4.GUI界面 项目代码 人脸采集 数据训练 人脸识别 合并GUI 项目总结 项目介绍 我们先来看看成果: 首先写了一个能够操作的GUI界面. 其中两个按钮对应相应的功能: 采集人脸: 识别功能: 我可是牺牲了色相五五五五...(电脑像素不是很好大家将就一下嘿嘿嘿) 项目思路 本项目是借助于python的一个cv2图像识别库,通过调取电脑的摄像头进行识别人脸并保存人脸图片的功能,然后在通过cv2

  • Java OpenCV图像处理之图形与文字绘制

    目录 前言 核心代码 效果图 前言 代码地址 序號 名稱 方法 1 圖像 添加文字 Imgproc.putText 2 圖像 畫直綫 Imgproc.line 3 圖像 畫橢圓 Imgproc.ellipse 4 圖像 畫矩形 Imgproc.rectangle 5 圖像 畫園 Imgproc.circle 6 圖像 填充 Imgproc.fillConvexPoly 核心代码 package com.xu.opencv.canva; import java.io.File; import ja

  • OpenCV图像处理GUI功能详解

    目录 一.图像入门 1.读取图像 2.显示图像 3.保存图像 二.视频入门 1.用相机捕捉视频 2.播放视频文件 3.保存视频 总结 OpenCV图像处理 一.图像入门 1.读取图像 使用 cv.imread() 函数读取一张图像,图片应该在工作目录中,或者应该提供完整的图像路径.第二个参数是一个 flag,指定了应该读取图像的方式 cv.IMREAD_COLOR:加载彩色图像,任何图像的透明度都会被忽略,它是默认标志cv.IMREAD_GRAYSCALE:以灰度模式加载图像cv.IMREAD_

  • python opencv图像处理基本操作示例详解

    目录 1.图像基本操作 ①读取图像 ②显示图像 ③视频读取 ④图像截取 ⑤颜色通道提取及还原 ⑥边界填充 ⑦数值计算 ⑧图像融合 2.阈值与平滑处理 ①设定阈值并对图像处理 ②图像平滑-均值滤波 ③图像平滑-方框滤波 ④图像平滑-高斯滤波 ⑤图像平滑-中值滤波 3.图像的形态学处理 ①腐蚀操作 ②膨胀操作 ③开运算和闭运算 4.图像梯度处理 ①梯度运算 ②礼帽与黑帽 ③图像的梯度处理 5.边缘检测 ①Canny边缘检测 1.图像基本操作 ①读取图像 ②显示图像 该函数中,name是显示窗口的名字

  • OpenCV图像处理GUI功能

    目录 一.图像入门 1.读取图像 2.显示图像 3.保存图像 二.视频入门 1.用相机捕捉视频 2.播放视频文件 3.保存视频 总结 OpenCV图像处理 一.图像入门 1.读取图像 使用 cv.imread() 函数读取一张图像,图片应该在工作目录中,或者应该提供完整的图像路径.第二个参数是一个 flag,指定了应该读取图像的方式 cv.IMREAD_COLOR:加载彩色图像,任何图像的透明度都会被忽略,它是默认标志cv.IMREAD_GRAYSCALE:以灰度模式加载图像cv.IMREAD_

  • OpenCV图像处理之图像拼接详解

    目录 图像拼接技术 一.需求分析 二.具体步骤 三.代码实现 图像拼接技术 一.需求分析 将下面两张图像进行拼接 拼接得到一张完整的图像 二.具体步骤 1.选择特征点 //1.选择特征点 //左图 右图 识别特征点 是Mat对象 用c d保存 surf->detectAndCompute(left,Mat(),key2,d); surf->detectAndCompute(right,Mat(),key1,c); //特征点对比,保存 特征点为中心点区域比对 vector<DMatch&

  • Python Opencv图像处理基本操作代码详解

    1.图像读取 使用cv2.imread(filepath,flags)读入图像 filepath: 读入图像完整路径(绝对路径,相对路径) flags: 读入图像标志 cv2.IMREAD_COLOR:默认参数,读入一副彩色图,忽略alpha通道:可以通过1指定 cv2.IMREAD_GRAYSCALE:读入灰度图片 也通过0指定 cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道 import cv2 img1 = cv2.imread('C:/star.png',1)

  • Python+OpenCV实现图像识别替换功能详解

    OpenCV-Python是一个Python库,旨在解决计算机视觉问题. OpenCV是一个开源的计算机视觉库,1999年由英特尔的Gary Bradski启动.Bradski在访学过程中注意到,在很多优秀大学的实验室中,都有非常完备的内部公开的计算机视觉接口.这些接口从一届学生传到另一届学生,对于刚入门的新人来说,使用这些接口比重复造轮子方便多了.这些接口可以让他们在之前的基础上更有效地开展工作.OpenCV正是基于为计算机视觉提供通用接口这一目标而被策划的. 安装opencv pip3 in

  • python OpenCV 实现高斯滤波详解

    目录 一.高斯滤波 二.C++代码 三.python代码 四.结果展示 1.原始图像 2.5x5卷积 3.9x9卷积 一.高斯滤波    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程. [1] 通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到.高斯滤波的具体操作是:用一个模板(或称卷积.掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值. 二.C++代码

  • Python OpenCV机器学习之图像识别详解

    目录 背景 一.人脸识别 二.车牌识别 三.DNN图像分类 背景 OpenCV中也提供了一些机器学习的方法,例如DNN:本篇将简单介绍一下机器学习的一些应用,对比传统和前沿的算法,能从其中看出优劣: 一.人脸识别 主要有以下两种实现方法: 1.哈尔(Haar)级联法:专门解决人脸识别而推出的传统算法: 实现步骤: 创建Haar级联器: 导入图片并将其灰度化: 调用函数接口进行人脸识别: 函数原型: detectMultiScale(img,scaleFactor,minNeighbors) sc

  • Python OpenCV绘制各类几何图形详解

    目录 一.绘制直线 二.绘制矩形 三.绘制圆形 四.绘制椭圆 五.绘制多边形 六.绘制文字 七.总结 一.绘制直线 在OpenCV中,绘制直线需要获取直线的起点和终点坐标,调用cv2.line()函数实现该功能.该函数原型如下所示: img = line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) – img表示需要绘制的那幅图像 – pt1表示线段第一个点的坐标 – pt2表示线段第二个点的坐标 – color表示线条颜色,需

  • Python+MediaPipe实现检测人脸功能详解

    目录 MediaPipe概述 人脸检测 MediaPipe概述 谷歌开源MediaPipe于2019年6月首次推出.它的目标是通过提供一些集成的计算机视觉和机器学习功能,使我们的生活变得轻松. MediaPipe是用于构建多模态(例如视频.音频或任何时间序列数据).跨平台(即eAndroid.IOS.web.边缘设备)应用ML管道的框架. Mediapipe还促进了机器学习技术在各种不同硬件平台上的演示和应用程序中的部署. 应用 人脸检测 多手跟踪 头发分割 目标检测与跟踪 目标:三维目标检测与

随机推荐