首页 > 解决方案 > 如何在 python 中使用 opencv 设置图像 dpi?

问题描述

我正在尝试在 python 中使用 opencv 将 dpi 设置为 (72,72)。谁能告诉我如何使用 imwrite 在 opencv 中分配 dpi ?

img = cv2.imread('kitchen.jpeg')
img = cv2.resize(img,(500,500),interpolation=cv2.INTER_AREA)
img = cv2.cvtColor(img, cv2.COLOR_RGBA2RGB)
mask = np.zeros(img.shape[:2],np.uint8)
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
rect = (10,10,500,500)
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask2[:,:,np.newaxis]
lower_white = np.array([0, 0, 0], dtype=np.uint8)
upper_white = np.array([0,0,0], dtype=np.uint8)
mask = cv2.inRange(img, lower_white, upper_white) # could also use threshold
res = cv2.bitwise_not(img, img, mask)
cv2.imwrite('kitchen_processed.jpeg',img)

标签: python-3.xopencv

解决方案


emm dpi 仅用于打印。在图像写入期间,您不必这样做,或者您不能这样做(对于某些格式)。仅在图像打印时您必须这样做。如果你坚持这样做。图像写入后,以文件名作为变量调用 System.call

convert -density 75 -units pixelsperinch infile.jpg outfile.png

通常密度为300或更多。在你的情况下,在 75 使用它

编辑

添加这个。不确定您是否还有其他潜在问题。但是根据您的标题,添加此行应该可以解决您的问题

import subprocess


img = cv2.imread('kitchen.jpeg')
img = cv2.resize(img,(500,500),interpolation=cv2.INTER_AREA)
img = cv2.cvtColor(img, cv2.COLOR_RGBA2RGB)
mask = np.zeros(img.shape[:2],np.uint8)
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
rect = (10,10,500,500)
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask2[:,:,np.newaxis]
lower_white = np.array([0, 0, 0], dtype=np.uint8)
upper_white = np.array([0,0,0], dtype=np.uint8)
mask = cv2.inRange(img, lower_white, upper_white) # could also use threshold
res = cv2.bitwise_not(img, img, mask)
cv2.imwrite('kitchen_processed.png',img)
subprocess.run('convert -density 75 -units pixelsperinch kitchen_processed.png outfile.png')

推荐阅读