我想检查11张img中的每个像素,消除极值,并使用中心值来计算平均值。
import cv2
import numpy as np
img1 = cv2.imread("J:/1.jpg", cv2.IMREAD_COLOR)
img2 = cv2.imread("J:/2.jpg", cv2.IMREAD_COLOR)
img3 = cv2.imread("J:/3.jpg", cv2.IMREAD_COLOR)
img4 = cv2.imread("J:/4.jpg", cv2.IMREAD_COLOR)
img5 = cv2.imread("J:/5.jpg", cv2.IMREAD_COLOR)
img6 = cv2.imread("J:/6.jpg", cv2.IMREAD_COLOR)
img7 = cv2.imread("J:/7.jpg", cv2.IMREAD_COLOR)
img8 = cv2.imread("J:/8.jpg", cv2.IMREAD_COLOR)
img9 = cv2.imread("J:/9.jpg", cv2.IMREAD_COLOR)
img10 = cv2.imread("J:/10.jpg", cv2.IMREAD_COLOR)
img11 = cv2.imread("J:/11.jpg", cv2.IMREAD_COLOR)
imgList = [img1, img2, img3, img4, img5, img6, img7, img8, img9, img10, img11]
height = img1.shape[0]
width = img1.shape[1]
imgall = np.array(imgList)
png = np.zeros((height, width, 4), dtype=np.uint8)
start1 = cv2.getTickCount()
for yh in range(height):
for xw in range(width):
pstd = np.std(imgall[:, yh, xw, :], axis=0)
pstdmean = np.mean(pstd)
if pstdmean < 50:
if pstdmean < 10:
png[yh, xw] = list(np.mean(imgall[:, yh, xw, :], axis=0)) + [255]
else:
pmedian = np.median(imgall[:, yh, xw, :], axis=0)
png[yh, xw] = list(pmedian) + [255]
end1 = cv2.getTickCount()
during1 = (end1 - start1) / cv2.getTickFrequency()
print(during1)
我正试图找到如何获取“聚集数” /“模式数”,例如:直方图,欧氏距离,bgr2grey,正态分布...
我想替换这种差的中位数方法。
答案 0 :(得分:0)
没有人回答我,但幸运的是,我自己找到了答案。 必须将其转换为numpy计算,并且不应使用for嵌套循环。 我将bgr拆分为b [] g [] r [],这样它们就可以一一计算,并且易于理解。 然后我将这11张img堆栈(axis = -1)到每个通道,很容易理解和计算,最后我将bgr堆栈到一张img,并使用mask = cv2.inRange(xxx,a,b)帮助我获得我want.png的Alpha通道也是使用遮罩。 png = np.stack((b,g,r,mask),axis = -1)