首先我们手里有一个视频,但是我们对视频进行图像处理的话视频很难暂停进行观察,我们可以写一个按键坚挺,但是小编这里介绍另一个办法,大致思路为,把视频进行截帧为图片的集合,再对该集合进行统一的图像处理,那如何来实现呢
PotPlayer
首先我们需要下载该软件,用来把视频变为图片集合
打开软件
接下来我们导入视频
然后我们按下快捷键 Ctrl + G,进入快速截取模式设置
在这里可以设置保存图片的位置,以及保存格式,张数选择等等,大家根据需求自行选择
完成上述操作以后我们点击开始,并且点击播放按钮,就开始帮我们开始截帧了
我们就完成了对视频进行拆解为大量的图片来,接下来我们对这些图片进行统一的图像处理
我们使用的是OTSU算法
import os
import cv2
import numpy as np
def read_path(file_pathname):
for filename in os.listdir(file_pathname):
print(filename)
#filename = filename
img = cv2.imread(file_pathname+'/'+filename)
############ 大津法 ################
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
hist,bins = np.histogram(gray.ravel(),bins = 255,density=True)#输出0~255灰度等级分布概率
#查看hist长度
#print("hist:",hist.shape)
#print("hist:",hist)
#print("bins",bins.shape)
#print("bins",bins)
#创建像素级数组
g = []
for i in range(1,256):
p = (i + i +1)/2
if i == 255:
p = 255
g.append(p)
g = np.array(g)
#print("g",g.shape)
#print("g:",g)
#全局平均阈值 这里除pi没有意义 因为全局总pi=1
M = np.sum(np.dot(hist, g))
#print("MG:",M)
max =0
for n in range(0,256):
m1 = np.sum(np.dot(hist[0:n],g[0:n]))/np.sum(hist[0:n])
m2 = np.sum(np.dot(hist[n:256], g[n:256]))/np.sum(hist[n:256])
score = sum(hist[0:n])*((m1 - M))**2 + sum(hist[n:256])*((m2 - M))**2
if max < score:
max = score
threshold = n
#print("OTSU",threshold)
#调用大津算法
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
#print("threshold value %s" % ret)
#cv.imshow("threshold", binary) #显示二值化图像
#调用阈值实验
# 取反操作:将0变为255,将255变为0
inverted_image = 255 - binary
cv2.imwrite("D:\\2" + "/" + filename, inverted_image)
read_path("D:\\shinei.mp4")
把上面的路径进行修改即可完成大规模的图片的图像处理了