OpenCV基础

OpenCV简介

OpenCV是一个功能强大的开源计算机视觉和机器学习软件库,它在图像处理和视频分析领域得到了广泛应用。OpenCV最初由英特尔公司于1999年发起并支持,后来由Willow Garage和Itseez(现在是Intel的一部分)维护。它是为了推动机器视觉领域的实时应用而开发的。OpenCV提供了丰富的算法,包括但不限于图像处理、物体和特征检测、物体识别、3D重建等。这些算法经过优化,可以在多种硬件平台上高效运行。OpenCV被广泛应用于面部识别、物体识别、运动跟踪、机器人视觉以及许多其他的计算机视觉应用中。

OpenCV的优势:

  • OpenCV基于C++实现,同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python API,结合了OpenCV C++ API和Python语言的最佳特性。 
  • 可以在不同的系统平台上使用。

 OpenCV-Python是一个Python绑定库,解决计算机视觉问题。

OpenCV-Python继承了OpenCV的多平台、轻量级和高效的特点,为Python开发者提供了丰富的计算机视觉功能。以下是OpenCV-Python的一些详细介绍:

  1. 接口封装:OpenCV-Python是OpenCV库C++实现的Python包装器。这意味着OpenCV-Python是对C++版本的OpenCV进行了Python风格的封装,使得Python开发者能够轻松地调用OpenCV的功能。
  2. 快速原型设计:OpenCV-Python非常适合用于计算机视觉问题的快速原型设计。它的设计使得开发者可以迅速实现想法并测试算法。
  3. 模块组成:OpenCV-Python包含了多个模块,每个模块都有其特定的应用场景。了解这些模块的功能和用途对于有效使用OpenCV-Python至关重要。
  4. 学习资源:为了掌握OpenCV-Python,官方提供了丰富的学习资源,包括官方网站、手册和入门教程。这些资料是学习和解决问题的重要参考。
  5. 安装与测试:在开始使用OpenCV-Python之前,需要确保已经正确安装了相关库,并且通过查询版本信息来验证安装是否成功。

图像的基础操作 

 读取图像

cv.imread()

参数:

  • 要读取的图像

  • 读取方式的标志

  • cv.IMREAD*COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数。

  • cv.IMREAD*GRAYSCALE:以灰度模式加载图像

  • cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式。

import numpy as np
import cv2 as cvimg = cv.imread('QQ.jpg',0)

显示图像

cv.imshow()

  • 显示图像的窗口名称,以字符串类型表示
  • 要加载的图像

保存图像

cv.imwrite() 

  • 文件名,保存在哪里
  • 保存的图像

cv.imwrite('messigray.png',img)

 读取一张图片,将其转换为灰度图像,并显示出来:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltimg = cv.imread('messi5.jpg',0)cv.imshow('image',img)plt.imshow(img[:,:,::-1])
plt.title('匹配结果'), plt.xticks([]), plt.yticks([])
plt.show()
k = cv.waitKey(0)cv.imwrite('messigray.png',img)

绘制几何图形

绘制直线

cv.line(img,start,end,color,thickness) 

  • img:要绘制直线的图像
  • Start,end: 直线的起点和终点
  • color: 线条的颜色
  • Thickness: 线条宽度

绘制圆形

cv.circle(img,centerpoint, r, color, thickness) 

  • img:要绘制圆形的图像
  • Centerpoint, r: 圆心和半径
  • color: 线条的颜色
  • Thickness: 线条宽度,为-1时生成闭合图案并填充颜色

绘制矩形

cv.rectangle(img,leftupper,rightdown,color,thickness) 

  • img:要绘制的矩形图像
  • Leftupper, rightdown: 矩形的左上角和右下角坐标
  • color: 线条的颜色
  • Thickness: 线条宽度

 向图像中添加文字

cv.putText(img,text,station, font, fontsize,color,thickness,cv.LINE_AA)

实战: 

import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltimg = np.zeros((512,512,3), np.uint8)cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv.circle(img,(447,63), 63, (0,0,255), -1)
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)plt.imshow(img[:,:,::-1])
plt.title('匹配'), plt.xticks([]), plt.yticks([])
plt.show()

 几何变换

图像缩放

cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 

  • src : 输入图像

  • dsize: 绝对尺寸,直接指定调整后图像的大小

  • fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可

  • interpolation:插值方法

import cv2 as cv
#  读取图片
img1 = cv.imread("dog.jpeg")rows,cols = img1.shape[:2]
res = cv.resize(img1,(2*cols,2*rows),interpolation=cv.INTER_CUBIC)res1 = cv.resize(img1,None,fx=0.5,fy=0.5)cv.imshow("orignal",img1)
cv.imshow("enlarge",res)
cv.imshow("shrink)",res1)
cv.waitKey(0)fig,axes=plt.subplots(nrows=1,ncols=3,figsize=(10,8),dpi=100)
axes[0].imshow(res[:,:,::-1])
axes[0].set_title("尺度)")
axes[1].imshow(img1[:,:,::-1])
axes[1].set_title("原图")
axes[2].imshow(res1[:,:,::-1])
axes[2].set_title("尺度")
plt.show()

 图像平移

cv.warpAffine(img,M,dsize)

  • img: 输入图像

  • M: 2∗∗3移动矩阵

 图像旋转

cv2.getRotationMatrix2D(center, angle, scale)

  • center:旋转中心
  • angle:旋转角度
  • scale:缩放比例
import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltimg = cv.imread("image.jpg")#  图像旋转
rows,cols = img.shape[:2]M = cv.getRotationMatrix2D((cols/2,rows/2),90,1)
# 旋转变换
dst = cv.warpAffine(img,M,(cols,rows))fig,axes=plt.subplots(nrows=1,ncols=2,dpi=100)
axes[0].imshow(img1[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("旋转后")
plt.show()

仿射变换

仿射变换是线性变换与平移的组合,可以保持直线和平行线的性质。它将矩形映射为平行四边形,即变换后各边仍然平行。

图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常到的功能,仿射变换主要是对图像的缩放,旋转,翻转和平移等操作的组合。

import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltimg = cv.imread("image.jpg")rows,cols = img.shape[:2]pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[100,100],[200,50],[100,250]])
M = cv.getAffineTransform(pts1,pts2)dst = cv.warpAffine(img,M,(cols,rows))fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("仿射后")
plt.show()

 透射变换

透视变换是一种中心投影的射影变换,它可以将矩形映射为任意不规则四边形,因此透视变换的自由度更高。透视变换适用于需要模拟三维空间中视角变化的场合,如在计算机视觉中的相机校准、三维重建等,利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使透视面透视轴旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。

import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltimg = cv.imread("image.jpg")rows,cols = img.shape[:2]
# 2.1 创建变换矩阵
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[100,145],[300,100],[80,290],[310,300]])T = cv.getPerspectiveTransform(pts1,pts2)dst = cv.warpPerspective(img,T,(cols,rows))fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("透射")
plt.show()

 类似的还有OpenCV处理平滑方法、边缘检测、视频读写等操作和API,后期会更新更多OpenCV相关操作~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/678560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题目练习(生死时速2.0版)

题目一(Before an Exam) 题意翻译 题目背景 明天皮特将要考生物。他并不很喜欢生物,但在 d 天前他得知他将不得不参加此次考试。皮特严厉的父母勒令他立即复习,因此他在第 i 天将需要学习不少于 minTimei​ 小时,不…

人工智能深度学习入门指南

随着人工智能(AI)技术的飞速发展,深度学习作为其重要分支,已经成为许多领域的研究热点。深度学习通过模拟人脑神经网络的运作方式,使得机器能够处理和分析海量的数据,从而实现更高级别的智能。本文将为你提…

SPI NOR FLASH和SPI NAND FLASH

SPI NOR FLASH和SPI NAND FLASH是两种不同的存储设备,它们在硬件接口和软件应用上都有所不同。以下是关于这两种存储设备更详细的介绍: 1.SPI NOR FLASH SPI NOR FLASH是一种非易失性存储器,它通过串行接口进行数据传输,具有读写…

IT行业有哪些证书含金量高?

1.Amazon Certified Cloud Practitioner 转码小白超友好的一门入门级证书,对于之前没有IT或者project经验的同学也可以轻轻松松顺利拿下,含金量很高可以直接标到linkedln的个人介绍里面。 (1)将如何帮助职业生涯 获得此认证可验证对 AWS Cloud、服务和…

真、开源LLM-OLMo

论文:https://arxiv.org/pdf/2402.00838.pdf Weights https://huggingface.co/allenai/OLMo-7B Code https://github.com/allenai/OLMo Data https://huggingface.co/datasets/allenai/dolma Evaluation https://github.com/allenai/OLMo-Eval Adaptation http…

分享88个表单按钮JS特效,总有一款适合您

分享88个表单按钮JS特效,总有一款适合您 88个表单按钮JS特效下载链接:https://pan.baidu.com/s/1v-qcl8bv2kxZ8a98Xo9UAg?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,…

【教3妹学编程-算法题】价值和小于等于 K 的最大数字

3妹:2哥,新年好鸭~ 2哥 : 新年好,3妹这么早啊 3妹:是啊,新年第一天要起早,这样就可以起早一整年 2哥 :得,我还不了解你,每天晒到日上三竿 3妹:嘿嘿嘿嘿,一年是…

安装了多个Java版本如何指定特定版本

Java版本问题的实战场景 机器安装了一个JDK 8的安装版本,默认的安装路径是 C:\Program Files\Java,JDK的安装版本同时安装了JDK 和JRE, 安装的路径分别是: JDK 路径: C:\Program Files\Java\jdk1.8.0_361JRE 路径: C…

【数据结构和算法】--- 基于c语言排序算法的实现(2)

目录 一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare法1.2.2 挖坑法1.2.3 前后指针法 1.3 快速排序优化1.3.1 三数取中法选key1.3.2 递归到小的子区间使用插入排序 1.4 快排非递归版 二、归并排序2.1 归并排序2.1.1 递归版2.1.2 非递归版 一、交换排序 基本思想&#xff1a…

VSCode:替换空行

有时从不同的编辑器拷贝过来的代码会有很多空行,可以通过以下办法进行删除: 1.按CtrlH弹出替换窗口 2.在查找输入框中输入:^\s*(?\r?$)\n 3.点击使用正则表达式 4.点击全部替换

3d渲染100农场如何使用?渲染100邀请码1a12

3d渲染农场通常用于电影、动画或视觉效果的渲染,本文以广受好评的渲染100农场为例,来讲解它的使用方法。 1、注册账号 前往渲染100官网(http://www.xuanran100.com/?ycode1a12)注册账号, 新用户注册记得填邀请码1a12,有30元大礼…

【软件设计师】——面向对象设计原则

为了提高软件的可维护性、可复用性,增加软件的可扩展性和灵活性,在面向对象编程的过程中我们需要遵守以下六条原则。 开闭原则 定义: 编写的代码需要对 扩展开放 对 修改关闭 ,实现 热插拔 的效果。 例:在编写不同皮…

【linux系统体验】-archlinux简易折腾

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化2.4 桌面面板美化 三、常用命令 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤: 磁盘分区安装 Linux内核配置系统(…

css2复合选择器

一.后代(包含)选择器(一样的标签可以用class命名以分别) 空格表示 全部后代 应用 二.子类选择器 >表示 只要子不要孙 应用 三.并集选择器 ,表示 代表和 一般竖着写 应用 四.伪类选择器(包括伪链接…

【JAVA WEB】 百度热榜实现 新闻页面 Chrome 调试工具

目录 百度热榜 新闻页面 Chrome 调试工具 --查看css属性 打开调试工具的方式 标签页含义 百度热榜 实现效果&#xff1a; 实现代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"vi…

无人机应用场景和发展趋势,无人机技术的未来发展趋势分析

随着科技的不断发展&#xff0c;无人机技术也逐渐走进了人们的生活和工作中。无人机被广泛应用于很多领域&#xff0c;例如遥感、民用、军事等等。本文将围绕无人机技术的应用场景和发展趋势&#xff0c;从多角度展开分析。 无人机技术的应用场景 无人机在遥感方面的应用&…

Linux(Ubuntu) 环境搭建:Nginx

注&#xff1a;服务器默认以root用户登录 NGINX 官方网站地址&#xff1a;https://nginx.org/en/NGINX 官方安装文档地址&#xff1a;https://nginx.org/en/docs/install.html服务器的终端中输入以下指令&#xff1a; # 安装 Nginx apt-get install nginx # 查看版本信息 ngi…

###C语言程序设计-----C语言学习(11)#数据的存储和基本数据类型

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 一. 数据的存储 1.整型数据的存储 计算机处理的所有信息都以二进制形式表示…

电子电器架构 —— 对车载软件开发新阶段的愿景

电子电器架构 —— 对车载软件开发新阶段的愿景 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝…

51单片机编程应用(C语言):篮球比赛计分器

设计思路 1.LCD1602显示A 000:B 000 右下角显示24的数字&#xff0c;显示一节时间12&#xff1a;00. 2.规定矩阵键盘每一位表示的含义 s1按下&#xff0c;A队加一分 s2按下&#xff0c;A队加两分 s3按下&#xff0c;A队加三分 s4按下&#xff0c;A队减一分 如…