不使用前端技术,使用createTrackbar函数
时间: 2024-03-27 09:37:21 浏览: 22
好的,如果不使用前端技术,可以使用OpenCV中的`createTrackbar`函数来创建RGB三个进度条,并实时更新图片的颜色和直方图的显示。
具体实现步骤如下:
1.引入OpenCV库
在代码中需要引入OpenCV库,以便使用其中的函数、类和方法。可以在代码中添加以下代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
```
2.创建窗口和进度条
```c++
Mat image(300, 300, CV_8UC3, Scalar(0, 0, 0));
namedWindow("RGB", WINDOW_AUTOSIZE);
int redValue = 0, greenValue = 0, blueValue = 0;
createTrackbar("Red", "RGB", &redValue, 255);
createTrackbar("Green", "RGB", &greenValue, 255);
createTrackbar("Blue", "RGB", &blueValue, 255);
```
上述代码中,我们首先创建了一个大小为300x300、颜色为黑色的图片。然后使用`namedWindow`函数创建了一个名为“RGB”的窗口,该窗口自适应图片大小。接着使用`createTrackbar`函数为窗口添加了三个进度条,分别对应红色、绿色和蓝色的值,并将它们的初始值设为0。
3.实时更新图片和直方图
```c++
while(true) {
Mat histogram(100, 300, CV_8UC3, Scalar(0, 0, 0));
int redCount[256] = {0}, greenCount[256] = {0}, blueCount[256] = {0};
for(int i=0; i<image.rows; i++) {
for(int j=0; j<image.cols; j++) {
Vec3b pixel = image.at<Vec3b>(i, j);
redCount[pixel[2]]++;
greenCount[pixel[1]]++;
blueCount[pixel[0]]++;
}
}
for(int i=0; i<256; i++) {
line(histogram, Point(i, 100), Point(i, 100 - redCount[i]), Scalar(0, 0, 255));
line(histogram, Point(i+256, 100), Point(i+256, 100 - greenCount[i]), Scalar(0, 255, 0));
line(histogram, Point(i+512, 100), Point(i+512, 100 - blueCount[i]), Scalar(255, 0, 0));
}
imshow("Histogram", histogram);
imshow("RGB", image);
int key = waitKey(10);
if(key == 27) {
break;
}
image.setTo(Scalar(blueValue, greenValue, redValue));
}
```
上述代码中,我们使用一个`while`循环来实现实时更新图片和直方图。在循环内部,首先创建了一个大小为100x300、颜色为黑色的直方图,并统计了图片中各个颜色通道的像素值。然后使用`line`函数在直方图中绘制了红色、绿色和蓝色三个通道的直方图。最后使用`imshow`函数分别显示了图片和直方图,并使用`waitKey`函数等待用户输入。如果用户按下了`Esc`键,则退出循环,否则更新图片的颜色,并继续循环。
4.运行程序
将上述代码保存为`.cpp`文件,并使用以下命令编译:
```sh
g++ -o rgb rgb.cpp `pkg-config opencv4 --cflags --libs`
```
其中,`rgb`为可执行文件名,`rgb.cpp`为代码文件名。编译成功后,运行可执行文件,即可看到RGB三个进度条和实时更新的图片和直方图。
希望这个问题的解答能够满足您的需求。如果您还有其他问题,欢迎随时提出。