在pycharm2023中编码实现图像灰度值反转实验,要求用到以下函数:cv.imread("xxx.bmp",0)、plt.figure() plt.imshow() plt.show(),请编码
时间: 2024-03-18 15:41:47 浏览: 64
好的,以下是实现图像灰度值反转的代码:
```
import cv2
import matplotlib.pyplot as plt
# 读取图像
img = cv2.imread("xxx.bmp", 0)
# 灰度值反转
img_inv = 255 - img
# 显示原图和反转后的图像
plt.figure()
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title("Original Image")
plt.subplot(122)
plt.imshow(img_inv, cmap='gray')
plt.title("Inverted Image")
plt.show()
```
其中,`cv2.imread`函数用于读取图像,`plt.figure`函数用于创建一个新的图像窗口,`plt.imshow`函数用于显示图像,`plt.show`函数用于显示图像窗口。在灰度值反转时,我们可以通过将原图像的像素值减去255,得到反转后的像素值。最后,我们使用`plt.subplot`函数将原图和反转后的图像显示在同一个图像窗口中。
相关问题
我要用Python在pycharm2023中编码,要求它能实现以下功能:实现图像灰度值反转实验,用程序实验空间分辨率变化效果:读入一副RGB图像,变换成灰度图像,保证灰度级不变,将图像采样间隔分别设置为2i(i=0,1…7).并在同一窗口内分成2行4列共8个子窗口分别显示,注上文字标题;采用图像幂次变换实现灰度变换增强图像:对一幅图像进行灰度变换,实现图像变亮、变暗效果;实现直方图均衡化,并比较前后两幅图片的灰度直方图。求完整代码。
以下是实现上述功能的完整代码,注释中有详细说明:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 实现图像灰度值反转
def inverse_transform(img):
img_inverse = 255 - img
return img_inverse
# 实现空间分辨率变化
def spatial_resolution_transform(img):
img_list = [img]
for i in range(1, 8):
img_resize = cv2.resize(img, (0, 0), fx=2**i, fy=2**i, interpolation=cv2.INTER_LINEAR)
img_list.append(img_resize)
return img_list
# 实现图像幂次变换增强
def power_transform(img, gamma):
img_power = np.power(img/255, gamma)
img_power = np.uint8(img_power*255)
return img_power
# 实现直方图均衡化
def histogram_equalization(img):
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_eq = cv2.equalizeHist(img_gray)
return img_eq
# 读入图像
img = cv2.imread('test.jpg')
# 实现图像灰度值反转
img_inverse = inverse_transform(img)
plt.subplot(241), plt.imshow(cv2.cvtColor(img_inverse, cv2.COLOR_BGR2RGB)), plt.title('Inverse')
# 实现空间分辨率变化
img_list = spatial_resolution_transform(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
for i in range(7):
plt.subplot(2, 4, i+2), plt.imshow(img_list[i]), plt.title('2^{}'.format(i))
# 实现图像幂次变换增强
img_power1 = power_transform(img, 0.5)
img_power2 = power_transform(img, 2)
plt.subplot(247), plt.imshow(cv2.cvtColor(img_power1, cv2.COLOR_BGR2RGB)), plt.title('Gamma=0.5')
plt.subplot(248), plt.imshow(cv2.cvtColor(img_power2, cv2.COLOR_BGR2RGB)), plt.title('Gamma=2')
# 实现直方图均衡化
img_eq = histogram_equalization(img)
plt.subplot(245), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('Original')
plt.subplot(246), plt.imshow(cv2.cvtColor(img_eq, cv2.COLOR_GRAY2RGB)), plt.title('Equalization')
plt.show()
```
请将代码保存为 Python 文件,注意将 `test.jpg` 文件放在与代码文件相同的目录下,并且安装 `opencv-python` 库和 `matplotlib` 库。运行代码后,会在窗口中显示处理后的图像。
用pycharm对图片进行灰度分析,要求平均灰度值图,灰度分布图,灰度等值轮廓线。求代码
好的,我明白了您的要求,以下是代码:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图片
img = cv2.imread('image.png')
# 将图片转化为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算平均灰度值
mean_gray = cv2.mean(gray_img)[0]
# 绘制灰度分布直方图
hist = cv2.calcHist([gray_img], [0], None, [256], [0, 256])
plt.plot(hist, color='gray')
# 绘制灰度等值轮廓线
contours, _ = cv2.findContours(gray_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(gray_img, contours, -1, (255, 255, 255), 2)
# 显示结果
plt.imshow(gray_img, cmap='gray')
plt.title('average gray: {}'.format(mean_gray))
plt.xticks([]), plt.yticks([])
plt.show()
```
以上代码主要使用了OpenCV和Matplotlib库,可以对灰度图像进行平均灰度值图,灰度分布图,灰度等值轮廓线的分析。需要注意的是,需要将图片转化为灰度图像进行处理。
阅读全文