猜测一下你的意思,这里有一种方法:
-
以灰度加载图像
-
纯黑白阈值
-
获取所有黑色像素的坐标
-
随机子采样0.5%的坐标
-
创建空输出图像
-
在二次采样位置的输出图像的alpha通道上绘制白色圆圈,这将使黑色背景在这些位置变得可见
#!/usr/bin/env python3
import numpy as np
import cv2 as cv
#Â Load image as greyscale
im = cv.imread('Gkzaa.png', cv.IMREAD_GRAYSCALE)
#Â Otsu threshold to pure black and pure white, i.e. 0 or 255
_, thresh = cv.threshold(im, 0, 255, cv.THRESH_BINARY+cv.THRESH_OTSU)
#Â Get X and Y coordinates of all black pixels
Y, X = np.where(thresh==0)
nBlack = len(Y)
#Â Get indices of 0.5% of those black pixels
indices = np.random.choice(nBlack, size=int(nBlack*0.005), replace=False)
#Â Form an empty (black) output image and an alpha channel for it
BGR = np.zeros((*im.shape,3), np.uint8)
A = np.zeros_like(im)
#Â Draw circles of opacity into the alpha channel at selected indices
for i in indices:
cv.circle(A, center=(X[i], Y[i]), radius=4, color=255, thickness=cv.FILLED)
#Â Stack the alpha channel onto the BGR channel to make BGRA and save
res = np.dstack((BGR,A))
cv.imwrite('result.png', res)