0


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

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


本文转载自: https://blog.csdn.net/jiebaoshayebuhui/article/details/128723484
版权归原作者 showswoller 所有, 如有侵权,请联系我们删除。

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

还没有评论