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实现对灰度图像进行阈值操作得到二值图像

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

相关文章
|
7天前
|
机器学习/深度学习 IDE 开发工具
基于OpenCV的车牌识别系统源码分享
基于OpenCV的车牌识别系统主要利用图像边缘和车牌颜色定位车牌,再利用OpenCV的SVM识别具体字符,从而达到车牌识别的效果。
37 4
基于OpenCV的车牌识别系统源码分享
|
1月前
|
Ubuntu 计算机视觉 C++
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
71 30
|
1月前
|
Ubuntu 计算机视觉 C++
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
80 43
|
1月前
|
Ubuntu 计算机视觉 C++
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
37 12
|
4月前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
4月前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
113 3
|
4月前
|
缓存 并行计算 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的相关信息。
147 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
4月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
943 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
5月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
5月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
76 4

热门文章

最新文章