opencv基础
Python 和 OpenCV 的结合是计算机视觉领域中应用最为广泛的一种方式,它们的结合使得开发者可以快速、高效地完成各种视觉任务。本文将介绍 Python 和 OpenCV 的基础使用,包括安装、图像读取、基本操作、特征提取等内容。
安装
在使用 Python 和 OpenCV 前,我们需要先安装它们。推荐使用 Anaconda 或者 Miniconda 来管理 Python 环境,这样可以有效地避免 Python 包冲突的问题。安装命令如下:
conda create -n opencv python=3.8
conda activate opencv
conda install -c conda-forge opencv
图像读取和显示
读取和显示图像是计算机视觉处理的基础,OpenCV 提供了方便的 API 来完成这一任务。
import cv2 # 读取图像
img = cv2.imread('test.jpg') # 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
上述代码中,cv2.imread 用于读取图像,cv2.imshow 用于显示图像。需要注意的是,cv2.imshow 后面需要加上 cv2.waitKey(0),这是因为 OpenCV 的 GUI 窗口需要等待用户的输入才能关闭。如果不加这行代码,GUI 窗口会一闪而过。
图像操作
在 OpenCV 中,我们可以对图像进行各种各样的操作,比如缩放、旋转、裁剪等。下面是一些常用的图像操作:
import cv2 # 缩放
img = cv2.imread('test.jpg')
resized_img = cv2.resize(img, (640, 480)) # 旋转
img = cv2.imread('test.jpg')
(h, w) = img.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, 45, 1.0)
rotated_img = cv2.warpAffine(img, M, (w, h)) # 裁剪
img = cv2.imread('test.jpg')
cropped_img = img[100:200, 100:200]
上述代码中,cv2.resize 用于缩放图像,cv2.getRotationMatrix2D 和 cv2.warpAffine 用于旋转图像,img[100:200, 100:200] 用于裁剪图像。
特征提取
在计算机视觉领域中,特征提取是非常重要的一部分。OpenCV 提供了各种各样的特征提取算法,比如 SIFT、SURF、ORB 等。下面是一个使用 SIFT 算法提取图像特征的示例:
import cv2 # 提取特征
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
(kps, descs) = sift.detectAndCompute(gray, None)
可视化特征点
cv2.drawKeypoints(img, kps, img, color=(0, 255, 0), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
上述代码中,`cv2.xfeatures2d.SIFT_create` 用于创建一个 SIFT 对象,`sift.detectAndCompute` 用于提取图像的特征点和描述符,`cv2.drawKeypoints` 用于可视化特征点。需要注意的是,`cv2.drawKeypoints` 的第三个参数是输入图像,第四个参数是输出图像,所以我们在可视化特征点时需要将输入图像和输出图像设置为同一个变量。
结语
本文介绍了 Python 和 OpenCV 的基础使用,包括安装、图像读取、基本操作、特征提取等内容。当然,这只是一个入门级别的介绍,如果想深入了解 Python 和 OpenCV,还需要更多的学习和实践。
opencv基础的更多相关文章
- 什么是图像 -- opencv基础
opencv基础篇--到底什么是图像 什么是图像?英语中有两个单词来形容图像,一个是picture,一个是image.这两者虽然是形容同一个东西,但却又有着区别.picture代表实而有物的真实图像: ...
- OpenCV基础篇之读取显示图片
程序及分析 /* * FileName : read.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 13 May ...
- opencv基础知识------IplImage, CvMat, Mat 的关系和相互转换
Mat,cvMat和IplImage这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像 ...
- opencv基础到进阶(1)
Opencv是一个用户基础非常多的视觉开发库,可以用来实现人脸识别等功能,由于涉及到大量的调用与计算,所以对硬件的条件要求很高,并且还需要时时刻刻注意内存溢出这个问题,怎么样?很刺激吧. 从这篇文章开 ...
- opencv基础教程 之 图像基础和绘图
1,教程:感谢小强 2,用argparse传参数来显示一张图片 #!/usr/bin/python #linux系统 #coding=utf-8 import cv2 import argparse ...
- OpenCV基础知识介绍
1.图像与矩阵 一般来说,图像是一个标准的矩形,有着宽度(width)和高度(height).而矩阵有着行(row)和列(column),矩阵的操作在数学和计算机中的处理都很常见且成熟,于是很自然的就 ...
- OpenCV 基础笔记
本文大部分内容来源于入门者的Python快速教程 - 番外篇之Python-OpenCV 本篇将介绍和深度学习数据处理阶段最相关的基础使用,并完成4个有趣实用的小例子: 延时摄影小程序 视频中截屏采样 ...
- opencv基础笔记(1)
为了细致掌握程明明CVPR 2014 oral文章:BING: Binarized Normed Gradients for Objectness Estimation at 300fps的代码,的好 ...
- jetson-nano opencv基础使用
前言: jetson nano前一篇给大家介绍了学习的一些思路和资料,今天继续给大家分享一篇在jetson nano使用opencv的文章. OpenCV的全称是Open Source Compute ...
- 图像混合学习。运用加权函数,学习opencv基础操作
{ cout<< } { cout<< } ,,logoImage.c ...
随机推荐
- 常用功能系列---【JWT生成Token实现接口登录认证方案思路】
JWT生成Token实现接口登录认证方案思路 方案一(双token实现无感刷新) 在token中,refreshToken的作用主要是避免token过期时,前端用户突然退出登录,跳转至登录页面. 但是 ...
- 为什么reids是单线程
我们首先要明白,reids很快,官方表示,因为reids是基于内存的操作,cpu不是reids的瓶颈,redis的瓶颈有可能是机器内存的大小或者网络带宽,既然单线程容易控制,而且cpu不会成为瓶颈,所 ...
- pycharm激活教程
激活地址:https://shimo.im/docs/YW9Gc3vHhJkWtRyQ/read 细节注意:下载版本,在官网下载,选择左下角更多版本,下载2019,3月份版本
- 试题管理/在线课程/模拟考试/能力评估报告/艾思在线考试系统www.aisisoft.cn
艾思软件发布在线考试系统, 可独立部署, 欢迎咨询索要测试账号 一. 主要特点: ThinkPHP前后端分离框式开发 主要功能有: 在线视频课程, 模拟考试, 在线考试, 能力评估报告, 考试历史错题 ...
- redis启动报错(TCP backlog setting of 511/overcommit_memory is set to 0/THP)
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is s ...
- [Vue warn]: Duplicate keys detected: ''. This may cause an update error. found in
原因: 使用element-ui 导致 使用路由模式之后 index 没写 导致 解决办法: 删掉 或者天添加路由
- Angular架构学习
定义 Angular 是一个用 HTML 和 JavaScript 或者一个可以编译成 JavaScript 的语言(例如 Dart 或者 TypeScript ),来构建客户端应用的框架. 写 An ...
- Chrome浏览器:Your Connection is not private 您的连接不是私密连接
在图片图片所示的任何地方输入: thisisunsafe 没错就是这么6,然后就可以访问了.输错了请刷新再来(微笑) https://blog.csdn.net/filbert_917/article ...
- hi,docker,docker的介绍
一.docker的介绍 1.什么是docker: docker是一种虚拟化技术,小型的系统环境(linux)2.虚拟化技术: 在计算机中用例管理虚拟资源的一种手段 内存管理.软件虚拟化.硬件虚拟化(磁 ...
- MYSQL DUAL(伪表)
#DUAL是一个伪表,不存在的表. SELECT 8*9 FROM DUAL #输出72