用法:
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)