可以给我一段完整的代码,利用vs实现打开一张图片,对打开的图片实现常规的直方图均衡,在此基础上能够有用户交互的规定直方图均衡
时间: 2023-06-03 08:08:05 浏览: 57
代码如下:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
using namespace std;
using namespace cv;
int main() {
Mat img = imread("test.jpg");
if (img.empty()) {
cout << "Failed to load image!" << endl;
return -1;
}
namedWindow("Image");
imshow("Image", img);
waitKey(0);
cvtColor(img, img, COLOR_BGR2GRAY);
equalizeHist(img, img);
namedWindow("Equalized Image");
imshow("Equalized Image", img);
waitKey(0);
destroyAllWindows();
return 0;
}
```
这段代码利用OpenCV库实现了打开一张图片,对打开的图片实现常规的直方图均衡。用户可以使用VS打开此代码,并将需要处理的图片放在程序目录下,然后运行程序即可得到处理后的图片。
相关问题
给我一段完整的代码,利用VS+opencv实现打开一张图片,对打开的图片进行直方图均衡,显示直方图
好的,以下是你需要的代码。需要注意的是,为了使用OpenCV,你需要先安装OpenCV库并且配置好VS的编译环境。
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("test.jpg"); // 读取图片
if (img.empty()) // 判断是否读取成功
{
cout << "Unable to load image!" << endl;
return -1;
}
Mat img_gray;
cvtColor(img, img_gray, COLOR_BGR2GRAY); // 将图片转为灰度图
Mat img_equalized;
equalizeHist(img_gray, img_equalized); // 直方图均衡
// 显示直方图
Mat hist;
int histSize = 256;
float range[] = { 0, 256 };
const float* histRange = { range };
calcHist(&img_gray, 1, 0, Mat(), hist, 1, &histSize, &histRange);
int hist_w = 512, hist_h = 400;
int bin_w = cvRound((double)hist_w / histSize);
Mat histImage(hist_h, hist_w, CV_8UC3, Scalar(0, 0, 0));
normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
for (int i = 1; i < histSize; i++)
{
line(histImage, Point(bin_w * (i - 1), hist_h - cvRound(hist.at<float>(i - 1))),
Point(bin_w * (i), hist_h - cvRound(hist.at<float>(i))),
Scalar(255, 0, 0), 2, 8, 0);
}
imshow("Original Image", img);
imshow("Equalized Image", img_equalized);
imshow("Histogram", histImage);
waitKey(0);
return 0;
}
```
这段代码使用了OpenCV的 `imread` 函数读取了一张名为 `test.jpg` 的图片,并将其转换为灰度图。接着使用 `equalizeHist` 函数对灰度图进行直方图均衡。最后使用 `calcHist` 函数计算原图的直方图,并将其绘制在一个黑色背景的图像上,使用 `imshow` 函数显示三个图像。
可以给我一段代码,实现打开一张图片,对打开的图片实现常规的直方图均衡,在此基础上能够有用户交互的规定直方图均衡
代码如下:
```python
import cv2
# 打开一张图片
img = cv2.imread('image.jpg')
# 对打开的图片实现常规的直方图均衡
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
equalized_img = cv2.equalizeHist(gray_img)
# 显示原图和处理后的图片
cv2.imshow('Original Image', img)
cv2.imshow('Equalized Image', equalized_img)
# 有用户交互的规定直方图均衡
def equalize_with_input(clipLimit, tileGridSize):
clahe = cv2.createCLAHE(clipLimit=clipLimit, tileGridSize=tileGridSize)
equalized_img = clahe.apply(gray_img)
cv2.imshow('Equalized Image', equalized_img)
# 使用滑动条实现用户交互
cv2.namedWindow('Equalized Image')
cv2.createTrackbar('clipLimit', 'Equalized Image', 2, 50, lambda x: equalize_with_input(x, tileGridSize))
cv2.createTrackbar('tileGridSize', 'Equalized Image', 8, 64, lambda x: equalize_with_input(clipLimit, x))
# 持续显示图片,直到按下任意键
cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows()
```
运行这段代码后,会打开一张图片并实现常规的直方图均衡。同时,会弹出一个交互窗口,包含两个滑动条,可以控制 `clipLimit` 和 `tileGridSize` 两个参数,使用户可以自定义规定直方图均衡。用户在滑动滑动条时,会不断更新展示出来的处理后的图片。用户可以自由调整滑动条,得到他们希望的均衡化效果。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)