Python 如何使这张照片不再是锯齿状的?

Python 如何使这张照片不再是锯齿状的?,python,opencv,image-processing,computer-vision,Python,Opencv,Image Processing,Computer Vision,如何使这张照片不再是锯齿状的?无需更改颜色数组。这里有一种方法可以通过在Python/OpenCV中模糊遮罩来做到这一点 读取输入 变灰 创建遮罩的阈值 模糊遮罩并拉伸,使127.5变为0,255保持在255 将遮罩转换为0到1范围内的浮动 将输入与掩码相乘,然后转换回8位整数,并剪裁到0到255的范围 保存结果 输入: 阈值图像: 遮罩图像: 结果: 你能将图像内联并添加更多细节吗?你需要一个低通/平滑/模糊过滤器,例如高斯。这是真实分辨率的图像吗?我不确定OP是否希望在内部边缘保


如何使这张照片不再是锯齿状的?无需更改颜色数组。

这里有一种方法可以通过在Python/OpenCV中模糊遮罩来做到这一点

  • 读取输入
  • 变灰
  • 创建遮罩的阈值
  • 模糊遮罩并拉伸,使127.5变为0,255保持在255
  • 将遮罩转换为0到1范围内的浮动
  • 将输入与掩码相乘,然后转换回8位整数,并剪裁到0到255的范围
  • 保存结果
输入:


阈值图像:

遮罩图像:

结果:


你能将图像内联并添加更多细节吗?你需要一个低通/平滑/模糊过滤器,例如高斯。这是真实分辨率的图像吗?我不确定OP是否希望在内部边缘保留锯齿,我认为他发布了一张放大的图像。每种颜色都可以被遮罩和消除锯齿,然后根据需要再次组合。
import cv2
import numpy as np
import skimage.exposure

# load image
img = cv2.imread('man.jpg')

# convert to gray
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# threshold
thresh = cv2.threshold(gray, 16, 255, cv2.THRESH_BINARY)[1]

# blur threshold image
blur = cv2.GaussianBlur(thresh, (0,0), sigmaX=5, sigmaY=5, borderType = cv2.BORDER_DEFAULT)

# stretch so that 255 -> 255 and 127.5 -> 0
mask = skimage.exposure.rescale_intensity(blur, in_range=(127.5,255), out_range=(0,255)).astype(np.float32) / 255
mask = cv2.merge([mask,mask,mask])

# replace alpha channel in input with new alpha channel
result = (mask * img).clip(0,255).astype(np.uint8)

# save output
cv2.imwrite('man_thresh.png', thresh)
cv2.imwrite('man_mask.png', mask)
cv2.imwrite('man_antialiased.png', result)

# Display various images to see the steps
cv2.imshow('gray',gray)
cv2.imshow('thresh', thresh)
cv2.imshow('mask', mask)
cv2.imshow('result', result)

cv2.waitKey(0)
cv2.destroyAllWindows()