在一张图片上滑动window,根据滑动的平均值window改变window中中心像素的值
Slide a window through an image, and change the value of center pixel in window based on the average value of the sliding window
我正在尝试在灰度图像上滑动 5 by 5
二维 window。
如果该 2D window 中的所有像素都等于 200,则将 window 中的中心像素值替换为 100。
import cv2
import numpy as np
from PIL import Image
from scipy.signal import convolve2d as conv2
image = cv2.imread("testImage.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
output = (conv2(gray, np.ones((5, 5), dtype=int), 'valid') == 200).astype(int)
我不确定从这里到哪里去或如何做
你几乎是正确的。你的 convolve2d 东西的输出是一个布尔数组,它在你想要改变值的地方有 True 。您可以将其用作原始数组的奇特索引,这是 numpy 的最佳功能之一。请注意,您需要“相同”而不是“有效”,以确保输出数组的大小正确。
import cv2
import numpy as np
from scipy.signal import convolve2d as conv2
image = cv2.imread("splat.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
box = np.ones((3,3),dtype=int)
output = conv2(gray, box, 'same') == 200
gray[output] = 100
我正在尝试在灰度图像上滑动 5 by 5
二维 window。
如果该 2D window 中的所有像素都等于 200,则将 window 中的中心像素值替换为 100。
import cv2
import numpy as np
from PIL import Image
from scipy.signal import convolve2d as conv2
image = cv2.imread("testImage.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
output = (conv2(gray, np.ones((5, 5), dtype=int), 'valid') == 200).astype(int)
我不确定从这里到哪里去或如何做
你几乎是正确的。你的 convolve2d 东西的输出是一个布尔数组,它在你想要改变值的地方有 True 。您可以将其用作原始数组的奇特索引,这是 numpy 的最佳功能之一。请注意,您需要“相同”而不是“有效”,以确保输出数组的大小正确。
import cv2
import numpy as np
from scipy.signal import convolve2d as conv2
image = cv2.imread("splat.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
box = np.ones((3,3),dtype=int)
output = conv2(gray, box, 'same') == 200
gray[output] = 100