设置RGB三个进度条,拖拽进度条让图片变颜色,显示随时变化的直方图
时间: 2024-03-19 07:45:28 浏览: 123
绘制RGB三色直方图
好的,我可以为您提供一种基于Python和OpenCV的代码,可以实现您的需求。您需要安装cv2和numpy库。
首先,导入必要的库:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
```
然后,定义一个函数来实现RGB三个进度条的拖拽:
```python
def on_trackbar(val):
global r, g, b
r = cv2.getTrackbarPos("R", "Image")
g = cv2.getTrackbarPos("G", "Image")
b = cv2.getTrackbarPos("B", "Image")
update_image()
```
其中,r、g、b是三个颜色通道的值,update_image函数用于更新图像。
接下来,读取图像并创建窗口和进度条:
```python
img = cv2.imread("image.jpg")
cv2.namedWindow("Image")
cv2.createTrackbar("R", "Image", 0, 255, on_trackbar)
cv2.createTrackbar("G", "Image", 0, 255, on_trackbar)
cv2.createTrackbar("B", "Image", 0, 255, on_trackbar)
```
然后,定义一个函数来更新图像和直方图:
```python
def update_image():
global img, r, g, b
img2 = img.copy()
img2[:, :, 0] = b
img2[:, :, 1] = g
img2[:, :, 2] = r
cv2.imshow("Image", img2)
hist = cv2.calcHist([img2], [0, 1, 2], None, [256, 256, 256], [0, 256, 0, 256, 0, 256])
plt.clf()
plt.plot(hist[:, :, :].ravel())
plt.xlim([0, 256*3])
plt.ylim([0, 10000])
plt.draw()
plt.pause(0.01)
```
其中,img2是处理后的图像,hist是图像的三维直方图。在更新图像和直方图后,使用plt模块绘制直方图并显示。
最后,运行程序:
```python
r, g, b = 0, 0, 0
update_image()
plt.ion()
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
```
希望这个代码对您有所帮助!
阅读全文