OpenCV简介、导入及图像处理基础方法讲解(图文解释 附源码)

简介: OpenCV简介、导入及图像处理基础方法讲解(图文解释 附源码)

需要源码和图片集请点赞关注收藏后评论区留言私信~~~

一、OpenCV简介

在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务

OpenCV还提供了Java、Python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上

OpenCV的主要应用领域有计算机视觉领域方向、物体识别、图像分割、人脸识别、动作识别、运动跟踪等

二、Python中OpenCV的安装与导入

安装OpenCV的方式很简单,按常规的模块安装方法运行安装命令即可。安装命令和模块导入的常规格式如下

pip install opencv-python

import cv2 as cv

三、OpenCV图像处理基础

cv2的基本方法与属性

OpenCV提供了大量图像处理相关的方法,常用方法及其说明如下图所示

下面打开图像并显示 然后输入esc退出 输入S时保存图像退出

代码如下

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img=cv.imread('D:\image\lena.jpg',cv.IMREAD_GRAYSCALE)
cv.imshow('Lean',img)
k = cv.waitKey(0)
if k == 27:         #等待按ESC键退出
    cv.destroyAllWindows()
elif k == ord('s'): #等待按S键保存图片并退出
    cv.imwrite('D:\image\newLena.jpg',img)
    cv.destroyAllWindows()

需要注意的是,通过OpenCV使用cv2.imread命令读取的彩色图像是BGR格式,如果有必要的话可以将其从BGR格式转换为RGB格式

image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)    

image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

图像打开后,利用其shape和size显示图像对象的尺寸和大小

print(img.shape)

print(img.size)

在处理图像时,可以将一些文字利用putText方法直接输出到图像中

putText格式: cv2.putText(图片名,文字,坐标,字体,字体大小,文字颜色,字体粗细) 字体可以选择FONT_HERSHEY_SIMPLEX、FONT_HERSHEY_SIMPLEX、FONT_HERSHEY_PLAIN等

代码如下

import cv2 as cv 
img = cv.imread('D:\image\lena.jpg',cv.IMREAD_GRAYSCALE) 
cv.namedWindow('Hello,Lena', cv.WINDOW_AUTOSIZE)
w,h=img.shape 
x = w // 3  # 文本的x坐标
y = h // 3 # 文本的y坐标 
cv.putText(img,'Hello,Lena!',(x,y),cv.FONT_HERSHEY_SIMPLEX,0.8,(255,0,0),1)
cv.imshow('Lean',img) #显示图像 
cv.waitKey(0)
cv.destroyAllWindows()

cv2图像处理示例

图像常用处理有图像缩放、旋转、仿射变换和二值化等

1. 图像缩放

实现缩放图片并保存,是使用OpenCV时常用的操作。cv2.resize()支持多种插值算法,默认使用cv2.INTER_LINEAR,缩小最适合使用:cv2.INTER_AREA,放大最适合使用:cv2.INTER_CUBIC或cv2.INTER_LINEAR

代码如下

import cv2 as cv 
import matplotlib.pyplot as plt
img = cv.imread('images\lena.jpg',cv.COLOR_BGR2GRAY) 
width,height,channel = img.shape
b,g,r = cv.split(img)
src = cv.merge([r, g, b])
res = cv.resize(src,(2*width,2*height),interpolation = cv.INTER_CUBIC)
plt.subplot(121)
plt.imshow(src)
plt.axis('off')
plt.subplot(122)
plt.imshow(res)
plt.axis('off')
# cv.waitKey(0)
# cv.destroyAllWindows()

2.图像旋转

OpenCV中首先需要构造一个旋转矩阵,可以通过cv2.getRotationMatrix2D获得。getRotationMatrix2D格式:

M = cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6) 其中,第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子

结果如下

img = cv.imread('images\lena.jpg',cv.IMREAD_COLOR)
rows,cols,ch = img.shape
b,g,r = cv.split(img)
src = cv.merge([r, g, b]) 
M = cv.getRotationMatrix2D((cols/2,rows/2),45,1)
dst = cv.warpAffine(src,M,(cols,rows))
plt.subplot(121)
plt.imshow(src)
plt.axis('off')
plt.subplot(122)
plt.imshow(dst)
plt.axis('off')

3.仿射变换

在仿射变换中,原图中所有的平行线在结果图像中同样平行。为了创建偏移矩阵,需要在原图像中找到三个点以及它们在输出图像中的位置。然后OpenCV中提供了cv2.getAffineTransform创建2*3的矩阵,最后将矩阵传给函数cv2.warpAffine

仿射变换结果如下

import numpy as np
img = cv.imread('images\lena.jpg',cv.COLOR_BGR2GRAY) 
rows,cols,ch = img.shape
b,g,r = cv.split(img)
img = cv.merge([r, g, b])
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv.getAffineTransform(pts1,pts2)
dst = cv.warpAffine(img,M,(cols,rows))
plt.subplot(121)
plt.imshow(img)
plt.title('Input')
plt.axis('off')
plt.subplot(122)
plt.imshow(dst)
plt.title('Output')
# plt.show()
plt.axis('off')

4.图像二值化

图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓

代码如下

src = cv.imread('images\lena.jpg',cv.COLOR_BGR2GRAY)  
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
cv.imshow('input',gray)
h, w = gray.shape[:2]
m = np.reshape(gray, [1, w*h])#化为一维数组
mean = m.sum() / (w*h)
print("mean: ", mean)
ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)
cv.imshow('Binary',binary)
cv.waitKey(0)
cv.destroyAllWindows()

上面的cv.Threshold实现对灰度图像进行阈值操作得到二值图像

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
2月前
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
基于qt的opencv实时图像处理框架FastCvLearn实战
|
15天前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
30 3
|
18天前
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
45 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
18天前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
83 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
7天前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
26 4
|
28天前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
57 2
WK
|
3月前
|
计算机视觉 Python
如何使用OpenCV进行基本图像处理
使用OpenCV进行基本图像处理包括安装OpenCV,读取与显示图像,转换图像颜色空间(如从BGR到RGB),调整图像大小,裁剪特定区域,旋转图像,以及应用图像滤镜如高斯模糊等效果。这些基础操作是进行更复杂图像处理任务的前提。OpenCV还支持特征检测、图像分割及对象识别等高级功能。
WK
44 4
|
3月前
|
存储 编解码 API
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
190 1
|
3月前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
375 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
4月前
|
计算机视觉 iOS开发 C++
【OpenCV】在MacOS上源码编译OpenCV
【7月更文挑战第9天】在MacOS上源码编译OpenCV需分步进行: 1. 准备工作: 安装Xcode, Command Line Tools及依赖如CMake, Homebrew. 2. 获取OpenCV源码: 从官网下载并解压所需版本. 3. 编译OpenCV. 4. 安装OpenCV: 编译后使用`sudo make install`进行安装. 5. 验证安装: 编写简单C++程序测试OpenCV功能, 如读取并显示图片.
126 1