使用plt.imread和cv2.imread
时间: 2023-10-25 12:09:34 浏览: 164
plt.imread和cv2.imread是两种不同的图像读取方法。plt.imread是matplotlib库中的函数,用于读取图像文件,返回的图像数据是RGB格式,即红、绿、蓝三个通道的值。而cv2.imread是OpenCV库中的函数,用于读取图像文件,返回的图像数据是BGR格式,即蓝、绿、红三个通道的值。
在使用plt.imshow进行图像展示时,如果使用cv2.imread读取的图像数据,由于颜色通道的不同,会导致红色和蓝色通道互换,从而使得红色变为蓝色,蓝色变为红色。
解决这个问题的方法是,可以通过cv2.cvtColor函数将图像数据从BGR格式转换为RGB格式,然后再使用plt.imshow进行展示。
相关问题
此代码问题import cv2 import numpy as np import matplotlib.pyplot as plt img1 = cv2.imread(r"E:/postgraduate/three/DIP3E_Original_Images_CH03/3.16.1.tif") img2 = cv2.imread(r"E:/postgraduate/three/DIP3E_Original_Images_CH03/3.16.2.tif") img3 = cv2.imread(r"E:/postgraduate/three/DIP3E_Original_Images_CH03/3.16.3.tif") img4 = cv2.imread(r"E:/postgraduate/three/DIP3E_Original_Images_CH03/3.16.4.tif") def bhistogram(src): height, width= src.shape dst = np.zeros((height, width), np.uint8) cv2.calcHist([src],[0],None,[256],[0,256]) / np.size(src) return dst image1 = bhistogram(img1) image2 = bhistogram(img2) image3 = bhistogram(img3) image4 = bhistogram(img4) plt.figure(figsize=(100,100)) plt.subplot(421) plt.imshow(img1,cmap='gray') plt.axis('off') plt.subplot(422) plt.plot(image1) plt.xlim([0,256]) plt.ylim([0,1]) plt.subplot(423) plt.imshow(img2,cmap='gray') plt.axis('off') plt.subplot(424) plt.plot(image2) plt.xlim([0,256]) plt.ylim([0,1]) plt.subplot(425) plt.imshow(img3,cmap='gray') plt.axis('off') plt.subplot(426) plt.plot(image3) plt.xlim([0,256]) plt.ylim([0,1]) plt.subplot(427) plt.imshow(img4,cmap='gray') plt.axis('off') plt.subplot(428) plt.plot(image4) plt.xlim([0,256]) plt.ylim([0,1]) plt.show()
这段代码存在一个问题,即在bhistogram函数中,虽然调用了cv2.calcHist函数计算了灰度直方图,但是并没有将其结果赋值给dst变量,导致bhistogram函数始终返回一个全为0的数组。因此,在绘制灰度直方图时,实际上绘制的是全0直方图,而不是图像的真实灰度分布情况。要解决这个问题,需要将cv2.calcHist函数的计算结果赋值给dst变量。修改后的bhistogram函数如下:
```
def bhistogram(src):
height, width = src.shape
dst = cv2.calcHist([src], [0], None, [256], [0, 256]) / np.size(src)
return dst
```
这样,就能够正确计算图像的灰度直方图并绘制了。
import cv2 as cv from matplotlib import pyplot as plt img=cv.imread("1.jpg",0) plt.hist(img.ravel(),256,[0,256]) img = cv.imshow("image",img) img = cv.waitKey() plt.show() import cv2 as cv import matplotlib.pyplot as plt img=cv.imread("1.jpg") img_gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY,0) equ=cv.equalizeHist(img_gray) plt.figure("原始灰度直方图") plt.title('Origin') plt.hist(img_gray.ravel(),256)的注释
这段代码主要是使用OpenCV和Matplotlib库对一张图像进行灰度直方图均衡化处理,并展示原始图像和均衡化后的图像的灰度直方图。
具体步骤如下:
1. 通过OpenCV读取一张图像,使用灰度图像模式(0表示灰度图像)。
2. 使用Matplotlib绘制原始图像的灰度直方图。
3. 将原始图像转换为灰度图像,使用cv.cvtColor函数将BGR图像转换为灰度图像。
4. 对灰度图像进行直方图均衡化处理,使用cv.equalizeHist函数实现。
5. 使用Matplotlib绘制均衡化后图像的灰度直方图,并显示原始图像和均衡化后的图像。
注释中的代码是绘制原始图像的灰度直方图,其中使用了plt.figure创建一个新的图像窗口,plt.title设置窗口标题,plt.hist绘制灰度直方图。
阅读全文