OpenCV与图像处理(一)

时间:2022-07-22
本文章向大家介绍OpenCV与图像处理(一),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本章节主要是图像处理基础操作,主要包括以下几点内容:

1、图像视频读取显示保存

2、图像变换

3、卷积处理:图像增强和滤波去燥

以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。


1、图像视频读取显示保存

1)读取路径下的图像并显示,完整代码如下:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 图片路径
img_path = "test.jpg"
# 读取路径下的图像
img=cv2.imread(img_path)
# 显示读取的图片
cv2.imshow("origin_img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:


2) 读取路径下的视频并显示,完整代码如下:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 视频路径
video_path = "car.mp4"
# 读取路径下的视频
cap = cv2.VideoCapture(video_path)
while (1):
  ret, img = cap.read()
  # 显示读取的视频
  cv2.imshow("origin_img", img)
  cv2.waitKey(100)
cap.release()
cv2.destroyAllWindows()

运行结果:


3)打开摄像头,显示读取的视频,并保存视频,完整代码如下:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 定义编码方式并创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
outfile = cv2.VideoWriter('output.avi', fourcc, 25., (640, 480))
# 打开摄像头
cap = cv2.VideoCapture(0)
while (1):
  # 获取一帧
    ret, img = cap.read()
  # 保存视频
    outfile.write(img)
    # 显示读取的视频
    cv2.imshow("origin_img", img)
    cv2.waitKey(100)
cap.release()
cv2.destroyAllWindows()

运行结果:

保存的视频文件:output.avi


2、图像变换

主要包括:

获取图像的高和宽;

将图像变为原来的2倍;

水平翻转180度;

垂直翻转180度;

水平垂直同时翻转;

图像绕着某一点的旋转;

调整亮度与对比度;

完整代码如下:

# -*- coding: utf-8 -*-
import cv2
import numpy as np

# 图片路径
img_path = "test.jpg"
# 读取路径下的图像
img=cv2.imread(img_path)
cv2.imshow("origin_img", img)

#获取图像的高和宽
height, width = img.shape[:2]

# 将图像变为原来的2倍, cv2.resize(变量 ,(宽,高), 插值方法)
resize_img = cv2.resize(img, (width*2,height*2), interpolation=cv2.INTER_CUBIC)
cv2.imshow("resize_img", resize_img)

#水平翻转180度
h_pic = cv2.flip(img, 1)    
cv2.imshow("h_pic", h_pic)

#垂直翻转180度
v_pic = cv2.flip(img, 0)    
cv2.imshow("v_pic", v_pic)

#水平垂直同时翻转
hv_pic = cv2.flip(img, -1)  
cv2.imshow("hv_pic", hv_pic)

# 图像绕着某一点的旋
center = (width / 2, height / 2) #取图像的中点
angle = 45
# 获得图像绕着某一点的旋转矩阵
M = cv2.getRotationMatrix2D(center, angle, scale=1.0)
# 第二个参数是变换矩阵,第三个参数是输出图像的大小
rotated = cv2.warpAffine(img, M, (height, width))
cv2.imshow("rotated", rotated)

# 调整亮度与对比度
contrast = 1        #对比度
brightness = 100    #亮度
addWeighted = cv2.addWeighted(img,contrast,img,0,brightness)
cv2.imshow("addWeighted", addWeighted)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:


3、卷积处理:图像增强和滤波去燥

主要包括:

直方图均衡化;

高斯去燥;

均值滤波;

中值滤波;

完整代码如下:

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img_path = "test.jpg"
img=cv2.imread(img_path)
cv2.imshow("img",img)

gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imshow("gray",gray)

# 直方图均衡化:作用是图像增强,对比度增强。
equalize_img = cv2.equalizeHist(gray)
cv2.imshow('equalize_img', equalize_img)

# 高斯去燥:高斯模糊实质上就是一种均值模糊,线性滤波算法,
# 只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小。
gaussianBlur_img = cv2.GaussianBlur(gray, (5, 5), 0)
cv2.imshow("gaussianBlur_img", gaussianBlur_img)

# 均值滤波:去随机噪声有很好的去燥效果,典型的线性滤波算法
#(1, 15)是垂直方向模糊,(15, 1)是水平方向模糊
mean_Blur_img = cv2.blur(gray, (1, 15))    
cv2.imshow("mean_Blur_img", mean_Blur_img)

# 中值滤波:对椒盐噪声有很好的去燥效果,非线性平滑
medianBlur_img = cv2.medianBlur(gray,15)
cv2.imshow("medianBlur_img", medianBlur_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:


以上内容如有错误或者需要补充的,请留言!