本章节主要是图像处理基础操作,主要包括以下几点内容:
1、图像视频读取显示保存
2、图像变换
3、卷积处理:图像增强和滤波去燥
以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。
1、图像视频读取显示保存
1)读取路径下的图像并显示,完整代码如下:
代码语言:javascript复制# -*- 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) 读取路径下的视频并显示,完整代码如下:
代码语言:javascript复制# -*- 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)打开摄像头,显示读取的视频,并保存视频,完整代码如下:
代码语言:javascript复制# -*- 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度;
水平垂直同时翻转;
图像绕着某一点的旋转;
调整亮度与对比度;
完整代码如下:
代码语言:javascript复制# -*- 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、卷积处理:图像增强和滤波去燥
主要包括:
直方图均衡化;
高斯去燥;
均值滤波;
中值滤波;
完整代码如下:
代码语言:javascript复制# -*- 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()
运行结果:
以上内容如有错误或者需要补充的,请留言!