用法:
1. 創建空文件夾:imgs
2. 將倒數第三行中的"222056.mov"改為你的視頻路徑,如:"a.mov"
3. 運行以下代碼
4. 稍等片刻,鼠標拖動選擇添加馬賽克區域,按enter確定(每次操作只能添加一個馬賽克區域,視頻會根據所選區域全程添加馬賽克)
5. 稍等片刻,'a.avi '就是做好的視頻文件,!!!注意!!!該視頻文件沒有音頻
展望:
可以結合opencv的圖像修復功能實現消除圖標,效果比一坨馬賽克好上不知幾倍!有空再搞……
源碼:
import cv2, os
import numpy as np
def video2img(videoroot):
cap = cv2.VideoCapture(videoroot)
isOpened = cap.isOpened # 判斷是否打開‘
print(isOpened)
fps = cap.get(cv2.CAP_PROP_FPS) #幀率
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps,width,height)
i = 0
while(isOpened):
i += 1
(flag,frame) = cap.read() # 讀取每一張 flag frame
fileName = './imgs/image'+str(i)+'.jpg'
print(fileName)
if flag == True:
frame = np.rot90(frame, 1)
cv2.imwrite(fileName,frame)
else:
break
return fps
def img2video(outvideoroot, fps):
img = cv2.imread('./imgs/image1.jpg')
imgInfo = img.shape
size = (imgInfo[1],imgInfo[0])
print(size)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
videowriter = cv2.VideoWriter(outvideoroot,fourcc,fps,size)
list_imgs = os.listdir('./imgs')
for i in range(1, len(list_imgs)):
fileName = './imgs/image'+str(i)+'.jpg'
img = cv2.imread(fileName)
videowriter.write(img)
def get_xoy():
imgsroot = './imgs'
list_ = os.listdir(imgsroot)
for n in list_:
path_ = os.path.join(imgsroot, n)
img = cv2.imread(path_)
bbox = cv2.selectROI('selectroi', img)
break
return bbox
def fitsign():
box = get_xoy()
xo, yo, w, h = box[0], box[1],box[2],box[3],
print(box)
dstroot = './imgs'
dstlist = os.listdir(dstroot)
kernel_size = (41, 41)
sigma = 50
for n in dstlist:
path_ = os.path.join(dstroot, n)
img = cv2.imread(path_)
crop = img[yo:yo+h, xo:xo+w, :]
crop = cv2.GaussianBlur(crop, kernel_size, sigma)
# crop = cv2.blur(crop, (41,41))
img[yo:yo+h, xo:xo+w, :] = crop
cv2.imwrite(path_, img)
if __name__ == "__main__":
fps = video2img("222056.mov")
fitsign()
img2video('a.avi', fps)
