gpt4 book ai didi

python - 如何使用 opencv copyTo() 函数?

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:56 31 4
gpt4 key购买 nike

我已经通读了 documentation for copyTo()但我仍然对如何将此功能应用于以下代码感到困惑。 This anwer说明我们可以使用 copyTo 函数代替 255-x。在这种情况下将如何应用此功能?我将不胜感激代码片段。

#   Compute the gradient map of the image
def doLap(image):

# YOU SHOULD TUNE THESE VALUES TO SUIT YOUR NEEDS
kernel_size = 5 # Size of the laplacian window
blur_size = 5 # How big of a kernal to use for the gaussian blur
# Generally, keeping these two values the same or very close works well
# Also, odd numbers, please...

blurred = cv2.GaussianBlur(image, (blur_size,blur_size), 0)
return cv2.Laplacian(blurred, cv2.CV_64F, ksize=kernel_size)

#
# This routine finds the points of best focus in all images and produces a merged result...
#
def focus_stack(unimages):
images = align_images(unimages)

print "Computing the laplacian of the blurred images"
laps = []
for i in range(len(images)):
print "Lap {}".format(i)
laps.append(doLap(cv2.cvtColor(images[i],cv2.COLOR_BGR2GRAY)))

laps = np.asarray(laps)
print "Shape of array of laplacians = {}".format(laps.shape)

output = np.zeros(shape=images[0].shape, dtype=images[0].dtype)

abs_laps = np.absolute(laps)
maxima = abs_laps.max(axis=0)
bool_mask = abs_laps == maxima
mask = bool_mask.astype(np.uint8)
for i in range(0,len(images)):
output = cv2.bitwise_not(images[i],output, mask=mask[i])

return 255-output

最佳答案

对不起,我在那里误导了你。尽管它在 C++ 中运行良好,但我在 Python 中找不到绑定(bind)。但是,您可以使用 numpy.copyto功能。

这是一个小演示,显示两种方法(bitwise_notcopyto)产生相同的结果。

import cv2
import numpy as np

# Create two images
im1 = np.zeros((100, 100, 3), np.uint8)
im1[:] = (255, 0, 0)
im2 = np.zeros((100, 100, 3), np.uint8)
im2[:] = (0, 255, 0)

# Generate a random mask
ran = np.random.randint(0, 2, (100, 100), np.uint8)

# List of images and masks
images = [im1, im2]
mask = [ran, 1-ran]

not_output = np.zeros((100, 100, 3), np.uint8)
copy_output = np.zeros((100, 100, 3), np.uint8)

for i in range(0, len(images)):
# Using the 'NOT' way
not_output = cv2.bitwise_not(images[i], not_output, mask=mask[i])
# Using the copyto way
np.copyto(copy_output, images[i], where=mask[i][:, :, None].astype(bool))

cv2.imwrite('not.png', 255 - not_output)
cv2.imwrite('copy.png', copy_output)

enter image description here enter image description here

请注意,一个额外的维度被填充到掩码数组中,以便它可以被广播。

关于python - 如何使用 opencv copyTo() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51448049/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com