OpenCV 01(图像加载与显示)

这篇具有很好参考价值的文章主要介绍了OpenCV 01(图像加载与显示)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、机器视觉

现在说的机器视觉(Machine Vision)一般指计算机视觉(Computer Vision), 简单来说就是研究如何使机器看懂东西。就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。

1.1 机器视觉的应用

人脸识别, 车辆检测,识别图像中的文字(OCR),图像拼接, 修复, 背景替换

二、OpenCV

OpenCV 01(图像加载与显示),opencv,人工智能,计算机视觉

Gray Bradsky于1999年开发, 2000年发布
C++, Python, Java, JS
跨平台(Windows, Linux, Mac...)

  • core模块实现了最核心的数据结构及其基本运算,如绘图函数、数组操作相关函数等。
  • highgui模块实现了视频与图像的读取、显示、存储等接口。
  • imgproc模块实现了图像处理的基础方法,包括图像滤波、图像的几何变换、平滑、阈值分割、形态学处理、边缘检测、目标检测、运动分析和对象跟踪等。

对于图像处理其他更高层次的方向及应用,OpenCV也有相关的模块实现

  • features2d模块用于提取图像特征以及特征匹配,nonfree模块实现了一些专利算法,如sift特征。
  • objdetect模块实现了一些目标检测的功能,经典的基于Haar、LBP特征的人脸检测,基于HOG的行人、汽车等目标检测,分类器使用Cascade Classification(级联分类)和Latent SVM等。
  • stitching模块实现了图像拼接功能。
  • FLANN模块(Fast Library for Approximate Nearest Neighbors),包含快速近似最近邻搜索FLANN 和聚类Clustering算法。
  • ml模块机器学习模块(SVM,决策树,Boosting等等)。
  • photo模块包含图像修复和图像去噪两部分。
  • video模块针对视频处理,如背景分离,前景检测、对象跟踪等。
  • calib3d模块即Calibration(校准)3D,这个模块主要是相机校准和三维重建相关的内容。包含了基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等等。
  • G-API模块包含超高效的图像处理pipeline引擎

学习opencv可以:

  • 了解OpenCV的运行机制
  • 可以使用OpenCV处理一些图像常见问题
  • 学会物体识别, 文字识别等问题的处理思路

2.1 安装OpenCV 

使用服务器虚拟环境安装:

pip install opencv-python==4.7.0.72


安装opencv扩展包(选装):

pip install opencv-contrib-python==4.7.0.72

如果装不了去:https://www.lfd.uci.edu/~gohlke/pythonlibs/下载相应的包手动安装.

三、OpenCV读取与显示

3.1 创建窗口

namedWindow() 创建命名窗口

# WINDOW_AUTOSIZE 窗口大小不允许修改
cv2.namedWindow('new', cv2.WINDOW_AUTOSIZE) 

# WINDOW_NORMAL可以让窗口大小变得可以调节
# cv2.namedWindow('new', cv2.WINDOW_NORMAL)

# 修改窗口大小
# cv2.resizeWindow('new', 1920, 1080)

imshow('new', 显示内容) 显示窗口
# 销毁图像窗口 cv2.destroyAllWindows()


# waitKey方法表示等待按键, 0表示任何按键, 其他整数表示等待按键的时间,单位是毫秒, 超过时间没有发生按键操作窗口会自动关闭.
waitKey() 等待用户输入



# 会返回按键的ascii的值
# key = cv2.waitKey(0)
if key == ord('q'):
cv2.destroyAllWindows()

ord()获取ascii值


 

3.2 图片读写

使用imread可以读取图片, 默认读取的是彩色图片.
imread(path, flag)
imwrite(path, img): 使用imwrite保存图片
cv2.imread('01_Picture/01_cat.jpg')
cv2.imshow('cat',img)
cv2.waitKey(0)

OpenCV 01(图像加载与显示),opencv,人工智能,计算机视觉

 使用matplotlib显示`plt.imshow(img)`

import matplotlib.pyplot as plt


img= cv2.imread('D:\\3-project\\zyj\\pythonCNN\\pic\\cat.jpeg')
plt.imshow(img)
plt.show()

OpenCV 01(图像加载与显示),opencv,人工智能,计算机视觉

因为OpenCV读取的图片颜色通道是按照BGR(蓝绿红)排列的, 一般图片通道都是按照RGB来排列的.为了正常的显示猫的图片, 我们要用OpenCV的图像显示方法:

OpenCV 01(图像加载与显示),opencv,人工智能,计算机视觉

3.3 视频播放和录制

视频是由图片组成的, 视频的每一帧就是一幅图片, 一般是30帧, 表示一秒显示30张图片

cv2.VideoCapture可以捕获摄像头, 用数字来表示不同的设备, 比如0, 1
vc = cv2.VideoCapture('./1.mp4')  # 打开视频文件
vc = cv2.VideoCapture(0)  # 打开摄像头

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

cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)

vc = cv2.VideoCapture(0) #打开摄像头

while True:
    # vc.read() 返回两个值, 第一个为状态值, 读到帧为True, 第二个值为视频帧
    ret, frame = vc.read()
    if not ret:
        break

    cv2.imshow('video',frame)  # 将视频帧放在窗口中显示
    key= cv2.waitKey(10)
    if key & 0xFF == ord('q'):
        break
 # 释放
vc.release()
cv2.destroyAllWindows()

录制视频

cap = cv2.VideoCapture(0)
# *mp4v就是解包操作 等同于  'm', 'p', '4', 'v'
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
# (640, 480)表示摄像头拍视频, 这个大小搞错了也不行.
# 主要是这个分辨率.
vw = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print('can not recive frame, Exiting...')
        break
        
    vw.write(frame)
    cv2.imshow('frame', frame)
    
    if cv2.waitKey(1) == ord('q'):
        break
        
cap.release()

#释放VideoWriter
vw.release()

cv2.destroyAllWindows()

- VideoWriter : 参数一为输出文件, 参数二为多媒体文件格式(VideoWriter_fourcc, 参数三为帧率, 参数四为分辨率.
- write 编码并写入缓存
- release 缓存内容写入磁盘, 并释放资源

3.4 控制鼠标

OpenCV允许我们对窗口上的鼠标动作做出响应.

setMouseCallback(winname, callback, userdata) winname是窗口的名字, callback是回调函数, userdata是给回调函数的参数.

callback(event, x, y, flags, userdata)回调函数必须包含这5个参数. event是事件(鼠标移动, 左键, 右键等), x,y是点鼠标的坐标点, flags主要用于组合键, userdata就是上面的setMouseCallback的userdata

  鼠标事件: 

  - EVENT_MOUSEMOVE   0     鼠标移动
  - EVENT_LBUTTONDOWN   1   按下鼠标左键
  - EVENT_RBUTTONDOWN   2  按下鼠标右键
  - EVENT_MBUTTONDOWN  3 按下鼠标中键
  - EVENT_LBUTTONUP    4      左键释放
  - EVENT_RBUTTONUP   5      右键释放
  - EVENT_MBUTTONUP   6     中键释放
  - EVENT_LBUTTONDBLCLK 7 左键双击
  - EVENT_RBUTTONDBLCLK  8 右键双击
  - EVENT_MBUTTONDBLCLK  9 中键双击
  - EVENT_MOUSEWHEEL  10 鼠标滚轮上下滚动
  - EVENT_MOUSEHWHEEL 11 鼠标左右滚动

  flags:

  - EVENT_FLAG_LBUTTON    1  按下左键
  - EVENT_FLAG_RBUTTON    2  按下右键
  - EVENT_FLAG_MBUTTON   4 按下中键
  - EVENT_FLAG_CRTLKEY    8   按下ctrl键
  - EVENT_FLAG_SHIFTKEY   16  按下shift键
  - EVENT_FLAG_ALTKEY       32  按下alt键

import cv2
import numpy as np


def mouse_callback(event, x, y, flags, userdata):
    print(event, x, y, flags, userdata)
    
cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse', 640, 360)

# 设置鼠标回调函数
cv2.setMouseCallback('mouse', mouse_callback, '123')

# 显示窗口和背景
# 生成全黑的图片
img = np.zeros((360, 640, 3), np.uint8)
while True:
    cv2.imshow('mouse', img)
    key = cv2.waitKey(1)
    if key & 0xFF == ord('q'):
        break
        
cv2.destroyAllWindows()

3.5 TrackBar控件

OpenCV 01(图像加载与显示),opencv,人工智能,计算机视觉

- createTrackbar(trackbarname, winname, value, count, onChange) 创建TrackBar控件, value为trackbar的默认值, count为bar的最大值, 最小为0
- getTrackbarPos(trackbarname, winname) 获取TrackBar当前值文章来源地址https://www.toymoban.com/news/detail-703385.html

import cv2
import numpy as np

# 创建窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse', 640, 480)
# 定义回调函数
def callback(value):
    print(value)

# 创建trackbar
cv2.createTrackbar('R', 'trackbar', 0, 255, callback)
cv2.createTrackbar('G', 'trackbar', 0, 255, callback)
cv2.createTrackbar('B', 'trackbar', 0, 255, callback)

# 创建一个背景图片
img = np.zeros((480,640,3), np.uint8)

while True:
    # 获取当前trackbar的值
    r = cv2.getTrackbarPos('R', 'trackbar')
    g = cv2.getTrackbarPos('G', 'trackbar')
    b = cv2.getTrackbarPos('B', 'trackbar')
    
    # 改变背景图颜色
    img[:] = [b, g, r]
    cv2.imshow('trackbar', img)
    
    key = cv2.waitKey(1)
    if key & 0xFF == ord('q'):
        break
        
cv2.destroyAllWindows()

到了这里,关于OpenCV 01(图像加载与显示)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • opencv+图像处理(GUI)1-0图像:创建加载显示保存关闭

    opencv+图像处理(GUI)1-0图像:创建加载显示保存关闭

    本专栏代码地址 https://github.com/xiawei20161308104/xv_opencv_tutorials 本节代码路径 xv_opencv_tutorials/ImageProcessinginOpenCV/load_img.py 创建窗口 namedWindow 从本地加载图像 imread 在窗口中展示图像 imshow 将图像写入文件 imwrite 关闭窗口 destroyWindow destroyAllWindows opencv提供 cv.namedWindow 函数实现创建一

    2023年04月21日
    浏览(13)
  • 人工智能算法工程师面试题——之OpenCV必背汇总(四)

    在OpenCV中,图像融合通常指的是将两个或更多图像以某种方式组合在一起,以创建一个新的图像。这个过程可以用于多种目的,比如艺术效果、图像修复或信息增强。实现图像融合的一种常见方法是通过加权求和,也就是每个像素位置上将不同图像的像素值按照一定的权重相

    2024年02月21日
    浏览(10)
  • 共读人工智能(第3版)---01人工智能概述

    智能是个体从经验中学习、正确推理、记忆重要信息,以及应对日常生活需求的认知能力。 (1)如何判定某个人或者物是否有智能? 可以用问答方式 (2)动物是否有智能? 有些经过人为的训练可以表现出智能;有些则在集体中表现出智能。 (3)如果动物有智能,那么如何评估它

    2024年01月25日
    浏览(13)
  • 读十堂极简人工智能课笔记01_人工智能简史

    读十堂极简人工智能课笔记01_人工智能简史

    8.1.2.1. 希望这个点子能让机器履行人脑的多数工作并自我复制 9.1.3.1. 并不遵循特定的程序 10.1.2.1. 有的问题是不可用计算机计算的 10.1.3.1. 图灵测试 10.1.3.2. 从此成为人工智能领域的一项重要测试 10.1.3.3. 它衡量不了许多其他形式的人工智能 10.1.3.3.1. 预测和优化 10.1.3.3.

    2024年02月19日
    浏览(8)
  • 人工智能第三版|chap01|task01

    人工智能第三版|chap01|task01

    机器人、语音识别、图像识别、自然语言处理和专家系统 专家系统:DENDRAL/MYCIN/EMYCIN/振动故障诊断/自动牙科识别 机器学习 深度学习 启发式搜索算法 自然语言处理 自动规划 盲目搜索 知情搜索 博弈中的搜索 人工智能中的逻辑 知识表示 产生式系统 自动规划 遗传算法 模糊控

    2024年01月24日
    浏览(22)
  • AI安全01 人工智能的安全性

    AI安全01 人工智能的安全性

    提问: GPT老师,我想写一篇阅读量高一点的信息安全博文,您可以推荐写作主题吗? GPT老师: 人工智能与信息安全。 写在前面: 1  笔者相关知识存储很少,这篇文章是采访全知全能的GPT老师写成的万字长文~内容的真实性、正确性、有效性请小伙伴自行鉴别~对于繁杂的对

    2024年02月12日
    浏览(10)
  • 使用人工智能助手 Github Copilot 进行编程 01

    AI 助⼿如何改变新程序员的学习⽅式 为什么编程永远不会再⼀样了 AI 助⼿如 Copilot 的⼯作原理 Copilot 如何解决⼊⻔级编程问题 AI 辅助编程的潜在危险 在本章中,我们将讨论人类如何与计算机进行交流。我们将向您介绍您的 AI 助手 GitHub Copilot,这是一个使用人工智能(AI)帮

    2024年01月22日
    浏览(14)
  • 【人工智能数学:01 高等概率论】(2) 离散型概率空间

    【人工智能数学:01 高等概率论】(2) 离散型概率空间

            这篇文章是对概率空间最基本概念的描述。解决的基本问题是试图“说服”大家,概率空间是个啥。不解决这种基本问题,试图提高学术水平是不可能的。         本文将涉及概率空间的定义、对于离散概率事件的定义、连续概率事件的定义、代数的一些含义、

    2024年02月10日
    浏览(12)
  • LDGRB-01 用于在边缘处理人工智能的嵌入式硬件

    LDGRB-01 用于在边缘处理人工智能的嵌入式硬件

    LDGRB-01  用于在边缘处理人工智能的嵌入式硬件商业和企业中的IT系统正在全面快速发展,一个不断增长的趋势正在将计算能力推向边缘。Gartner预测,到2025年,边缘计算将处理75%的数据由所有用例产生,包括工厂、医疗保健和运输中的用例。您可以将边缘计算的采用与人工智

    2024年02月07日
    浏览(9)
  • 基于Solr的智能化人工智能与智能图像识别

    作者:禅与计算机程序设计艺术 引言 1.1. 背景介绍 随着人工智能技术的快速发展,人工智能与图像识别应用越来越广泛。在实际应用中,基于Solr的智能化人工智能与智能图像识别技术具有很高的实用价值和可行性。 1.2. 文章目的 本文旨在讲解如何基于Solr实现智能化人工智

    2024年02月07日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包