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基础的更多相关文章

  1. 什么是图像 -- opencv基础

    opencv基础篇--到底什么是图像 什么是图像?英语中有两个单词来形容图像,一个是picture,一个是image.这两者虽然是形容同一个东西,但却又有着区别.picture代表实而有物的真实图像: ...

  2. OpenCV基础篇之读取显示图片

    程序及分析 /* * FileName : read.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 13 May ...

  3. opencv基础知识------IplImage, CvMat, Mat 的关系和相互转换

    Mat,cvMat和IplImage这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像 ...

  4. opencv基础到进阶(1)

    Opencv是一个用户基础非常多的视觉开发库,可以用来实现人脸识别等功能,由于涉及到大量的调用与计算,所以对硬件的条件要求很高,并且还需要时时刻刻注意内存溢出这个问题,怎么样?很刺激吧. 从这篇文章开 ...

  5. opencv基础教程 之 图像基础和绘图

    1,教程:感谢小强 2,用argparse传参数来显示一张图片 #!/usr/bin/python #linux系统 #coding=utf-8 import cv2 import argparse ...

  6. OpenCV基础知识介绍

    1.图像与矩阵 一般来说,图像是一个标准的矩形,有着宽度(width)和高度(height).而矩阵有着行(row)和列(column),矩阵的操作在数学和计算机中的处理都很常见且成熟,于是很自然的就 ...

  7. OpenCV 基础笔记

    本文大部分内容来源于入门者的Python快速教程 - 番外篇之Python-OpenCV 本篇将介绍和深度学习数据处理阶段最相关的基础使用,并完成4个有趣实用的小例子: 延时摄影小程序 视频中截屏采样 ...

  8. opencv基础笔记(1)

    为了细致掌握程明明CVPR 2014 oral文章:BING: Binarized Normed Gradients for Objectness Estimation at 300fps的代码,的好 ...

  9. jetson-nano opencv基础使用

    前言: jetson nano前一篇给大家介绍了学习的一些思路和资料,今天继续给大家分享一篇在jetson nano使用opencv的文章. OpenCV的全称是Open Source Compute ...

  10. 图像混合学习。运用加权函数,学习opencv基础操作

               {          cout<<     }           {          cout<<     }       ,,logoImage.c ...

随机推荐

  1. vue-设置页面滚动高度不生效问题处理

    首先,我遇到的问题是 无法保留(B)页面滚动的位置(scrollTop ) 无法赋值?! 黄色框是滚动部分(非最外层) 参考:https://www.csdn.net/tags/OtDakg2sOTA ...

  2. linux中安装启动postgresql教程

    安装: 官网地址:https://www.postgresql.org 选择下载版本: https://www.postgresql.org/ftp/source 下载方式: wget https:/ ...

  3. org.nutz.http.Http忽略https SSL证书验证

    访问的是一个https get请求,报错需要SSL证书验证,以下方法直接跳过 boolean check = Http.disableJvmHttpsCheck(); // 忽略https的证书检查

  4. jquery 时间戳转化为日期时间格式,年月日 时分秒

    <script type="text/javascript"> var strDate = ''; $(function(){ // 获取时间戳 时间戳为10位需*10 ...

  5. css卡片样式

    .view-1-user-card { margin: 20px 5% 10px 5%; height: 124px; width: 90%; background: linear-gradient( ...

  6. scaled logy

    library(ggplot2) set.seed(1) vals1 <- rbeta(1000, 0.5, 0.1) vals2 <- rbeta(1000, 0.25, 0.3) gg ...

  7. Error parsing HTTP request header 控制台报错分析与解决

    控制台报错信息: org.apache.coyote.http11.AbstractHttp11Processor process 信息: Error parsing HTTP request hea ...

  8. 2022.07.13 vue3下pinia的简单使用及持久化

    使用前说明: 当前demo使用了vue3 + vite + typescript + pinia搭建的简单项目,主要介绍了在单文件组件(sfc)基础上使用pinia的用法,懒得看api的兄弟们,来这瞅 ...

  9. Python中列表、元组、字典的区别

    列表: 列表是一种数据结构,每一个元素对应一个值.例如:list=['a','b','c'] 访问列表数据通过下标的方式来进行数据访问,list[下标] list.append(i)  添加数据 de ...

  10. SpringBoot之独立quartz数据源

    背景: 之前项目里面把quartz相关的表跟业务数据库(涉及系统业务的库)融合在一起,后面需要把quartz单独拎出来放在一个数据库里面, 旧的数据源配置(application.properties ...