基于oepncv 将jpg转成png
一,前言
在制作裸眼3D视频的时候,对Midas估计上下无意义黑色部分的区域很不满意,老是估计的一坨大便,看着就觉得用这来与跟其他公司谈合作简直了,不行得思索思索。
二,实现代码
import cv2 as cv
import numpy as np
def transPNG(srcImageName, dstImageName):
img1=cv.imread(srcImageName)
imggray=cv.cvtColor(img1,cv.COLOR_BGR2GRAY)
imgStrong=cv.addWeighted(imggray,10,imggray,10,0)
t1, imgMask = cv.threshold(imgStrong, 150, 255, cv.THRESH_BINARY+cv.THRESH_OTSU)
kernel = np.ones((4, 4), np.uint8)
dlilate = cv.dilate(imgMask, kernel)
erod = cv.erode(dlilate, kernel)
imgpng=cv.merge([img1[:,:,0],img1[:,:,1],img1[:,:,2],erod])
cv.imwrite(dstImageName, imgpng, [int(cv.IMWRITE_PNG_COMPRESSION), 0])
cv.namedWindow('png',0)
cv.imshow('png',imgpng)
cv.waitKey(0)
img1=r'D:\Backup\Documents\My Pictures\Camera Roll\77.jpeg'
outputimg=r'D:\Backup\Documents\My Pictures\Camera Roll\771`.png'
transPNG(img1,outputimg)
三,程序效果
下面是转化后的png图, 用其转化后的深度估计效果也嘎嘎好了一些
将黑色深的地方透明度变为0,浅的不变,形成一个抠图的效果。如果原图中有黑夜,不想附带抠图的一点效果,只是单纯的转化的话:
可以将
imgpng=cv.merge([img1[:,:,0],img1[:,:,1],img1[:,:,2],imgMask])
修改为
imgpng=cv.merge([img1[:,:,0],img1[:,:,1],img1[:,:,2]])
运行即可