import numpy as np import cv2 import matplotlib.pyplot as plt # 读取图片 pic_file='./photo/cat.jpg' img_bgr = cv2.imread(pic_file,cv2.IMREAD_COLOR) cv2.imshow("input",img_bgr) # 分别获取三个通道的ndarray数据 img_b=img_bgr[:,:,0] img_g=img_bgr[:,:,1] img_r=img_bgr[:,:,2] '''按R、G、B三个通道分别计算颜色直方图''' b_hist = cv2.calcHist([img_bgr],[0],None,[256],[0,255]) g_hist = cv2.calcHist([img_bgr],[1],None,[256],[0,255]) r_hist = cv2.calcHist([img_bgr],[2],None,[256],[0,255]) m,dev = cv2.meanStdDev(img_bgr) #计算G、B、R三通道的均值和方差 # img_r_mean=np.mean(r_hist) #计算R通道的均值 # print(m) # print(dev) '''显示三个通道的颜色直方图''' plt.plot(b_hist,label='B',color='blue') plt.plot(g_hist,label='G',color='green') plt.plot(r_hist,label='R',color='red') plt.legend(loc='best') plt.xlim([0,256]) plt.show() cv2.waitKey(0)
时间: 2024-01-30 18:03:36 浏览: 66
您的代码是用于读取图片并计算颜色直方图。您可以使用OpenCV库中的cv2.imread函数读取图片,并将其分成三个通道(蓝色、绿色和红色)。然后,使用cv2.calcHist函数计算每个通道的颜色直方图。最后,使用matplotlib.pyplot库绘制每个通道的颜色直方图。
请注意,我并不能运行您的代码,因为我是一个基于文本的AI模型,无法处理图像。但您可以将代码复制到本地环境中运行,并查看结果。如果您有任何关于代码的问题或需要进一步帮助,请随时提问!
相关问题
# 开发者:李宗涛 # 开发时间:2023/5/30 17:51 import numpy as np import cv2 import matplotlib.pyplot as plt # 读取图像 img = cv2.imread('image1.jpg') img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 添加高斯噪声 mean = 0 var = 100 sigma = var**0.65 gaussian_noise = np.random.normal(mean, sigma, img.shape) img_noise = img + gaussian_noise # 构造低通滤波器 rows, cols = img_noise.shape crow, ccol = rows // 2, cols // 2 mask = np.zeros((rows, cols), np.uint8) mask[crow - 200:crow + 200, ccol - 200:ccol + 200] = 1 # 进行傅里叶变换 f = np.fft.fft2(img_noise) fshift = np.fft.fftshift(f) # 对频域图像进行滤波 fshift = fshift * mask # 进行傅里叶反变换 ishift = np.fft.ifftshift(fshift) img_back = np.fft.ifft2(ishift) img_back = np.abs(img_back) # 显示结果 plt.subplot(131), plt.imshow(img, cmap='gray') plt.title('Original Image'), plt.xticks([]), plt.yticks([]) plt.subplot(132), plt.imshow(img_noise, cmap='gray') plt.title('Noised Image'), plt.xticks([]), plt.yticks([]) plt.subplot(133), plt.imshow(img_back, cmap='gray') plt.title('noiseless Image'), plt.xticks([]), plt.yticks([]) plt.show()
这段代码实现了对一张图像添加高斯噪声,然后通过傅里叶变换将其转换到频域进行滤波,最后再通过傅里叶反变换将其转换回空域得到去噪后的图像。具体操作包括:
1. 读取一张图像,并将其转换为 RGB 格式;
2. 构造高斯噪声并添加到图像上;
3. 构造一个低通滤波器,选取中心区域,其余部分为 0;
4. 进行傅里叶变换,并对频域图像进行滤波;
5. 进行傅里叶反变换,将频域图像转换回空域;
6. 显示原始图像、加噪图像和去噪后的图像。
import cv2import numpy as npfrom matplotlib import pyplot as plt # 读取图片并转为灰度图像img = cv2.imread("image.jpg", 0) # 计算灰度直方图hist = cv2.calcHist([img], [0], None, [256], [0, 256]) # 显示灰度直方图plt.hist(img.ravel(), 256, [0, 256])plt.show() # 计算二维直方图hsv = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)hist2d = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256]) # 显示二维直方图plt.imshow(hist2d, interpolation="nearest")plt.show()
这段代码是用Python中的OpenCV库来计算和显示图片的灰度直方图和二维直方图。首先,使用cv2.imread()函数读取一张图片并转为灰度图像。然后,使用cv2.calcHist()函数计算灰度直方图和二维直方图。最后,使用matplotlib库中的plt.hist()函数和plt.imshow()函数分别显示灰度直方图和二维直方图。其中,灰度直方图使用一维的256个bin来表示灰度级别的分布情况,而二维直方图则使用180个bin表示色调(hue)的分布情况,256个bin表示饱和度(saturation)的分布情况。
阅读全文