from scipy import signal # 通过定义guassBlur来实现图像的高斯平滑,首先进行水平方向高斯卷积,然后进行垂直方向高斯卷积 def gaussBlur(image,sigma,H,W,_boundary='full',_fillvalue=0): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 将灰度图像转换为二维数组 gray_array = np.reshape(gray, (gray.shape[0], gray.shape[1])) # 构建水平方向上的高斯卷积核 gaussKernel_x = cv2.getGaussianKernel(W,sigma,cv2.CV_64F) print(gaussKernel_x) # 转置 gaussKernel_x = np.transpose(gaussKernel_x) print(gaussKernel_x) # 图像矩阵与水平高斯核卷积 gaussBlur_x = signal.convolve2d(gray_array,gaussKernel_x,mode='same',boundary=_boundary, fillvalue=_fillvalue) # 构建垂直方向上的高斯卷积核 gaussBlur_y = cv2.getGaussianKernel(H,sigma,cv2.CV_64F) # 与垂直方向上的高斯核卷积核 gaussBlur_xy = signal.convolve2d(gaussBlur_x,gaussBlur_y,mode='same',boundary=_boundary, fillvalue=_fillvalue) return gaussBlur_xy image = cv2.imread('../Img/7418.jpeg') cv2.imshow('image',image) # 高斯平滑 blurImage = gaussBlur(image,5,10,10,'symm') # 对blurImage进行灰度级显示 blurImage = np.round(blurImage) blurImage = blurImage.astype(np.uint8) cv2.imshow('guassblur',blurImage) cv2.waitKey(0) cv2.destroyAllWindows()。怎么将高斯模糊输出彩色图像
时间: 2024-01-14 08:04:39 浏览: 56
在代码中,将彩色图像转换为灰度图像的代码是 `gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)`,因此需要将其修改为不转换为灰度图像的代码。同时,在进行高斯模糊时,需要对图像的每一个通道进行独立的卷积操作。
以下是修改后的代码:
```
from scipy import signal
import cv2
import numpy as np
def gaussBlur(image, sigma, H, W, _boundary='symm', _fillvalue=0):
# 构建水平方向上的高斯卷积核
gaussKernel_x = cv2.getGaussianKernel(W, sigma, cv2.CV_64F)
# 构建垂直方向上的高斯卷积核
gaussKernel_y = cv2.getGaussianKernel(H, sigma, cv2.CV_64F)
# 将两个高斯卷积核相乘得到二维卷积核
gaussKernel = np.multiply(gaussKernel_x, np.transpose(gaussKernel_y))
# 对每个通道进行独立的高斯卷积
height, width, channel = image.shape
blurImage = np.zeros((height, width, channel), dtype=np.uint8)
for i in range(channel):
blurImage[:, :, i] = signal.convolve2d(image[:, :, i], gaussKernel, mode='same', boundary=_boundary, fillvalue=_fillvalue)
return blurImage
image = cv2.imread('../Img/7418.jpeg')
cv2.imshow('image', image)
# 高斯平滑
blurImage = gaussBlur(image, 5, 10, 10, 'symm')
cv2.imshow('gaussblur', blurImage)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在代码中,使用 `np.multiply(gaussKernel_x, np.transpose(gaussKernel_y))` 将水平方向和垂直方向上的高斯卷积核相乘得到二维卷积核。然后,对每个通道进行独立的高斯卷积,并将结果存储在 `blurImage` 中。最后,使用 `cv2.imshow` 显示彩色高斯模糊图像。
阅读全文