下载安装 OpenCV
到官网:https://opencv.org/releases/选择对应版本下载

找到安装包双击即可


设置环境变量


使用 CLion 新建 OpenCV 工程


将Cmakelist.txt 替换成以下文本
cmake
cmake_minimum_required(VERSION 4.2)
project(untitled)
set(CMAKE_CXX_STANDARD 20)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

解决乱码问题
统一全链路 UTF-8 配置(最推荐,治本之策)
让编辑器、编译器、程序运行环境全部使用 UTF-8,彻底消除 Windows 带来的编码差异。
修改 CLion 设置
打开设置:File -> Settings(Ctrl + Alt + S)。
编辑器设置:进入 Editor-> File Encodings,将 Global Encoding、Project Encoding 和 Default encoding for properties files全部设置为 UTF-8。
控制台设置:进入 Editor -> General -> Console,将 Default encoding设置为 UTF-8。
加入这个函数
cpp
#include <opencv2/opencv.hpp>
#include <windows.h>
#include <string>
std::string utf8ToGBK(std::string utf8String) {
int wlen = MultiByteToWideChar(CP_UTF8, 0, utf8String.c_str(), -1, nullptr, 0);
wchar_t* wstr = new wchar_t[wlen];
MultiByteToWideChar(CP_UTF8, 0, utf8String.c_str(), -1, wstr, wlen);
int glen = WideCharToMultiByte(CP_ACP, 0, wstr, -1, nullptr, 0, nullptr, nullptr);
char* gstr = new char[glen];
WideCharToMultiByte(CP_ACP, 0, wstr, -1, gstr, glen, nullptr, nullptr);
std::string result(gstr);
delete[] wstr;
delete[] gstr;
return result;
}
函数调用
cpp
cv::namedWindow(utf8ToGBK("中文标题"));
cv::imshow(utf8ToGBK("中文标题"), img);
最终测试代码
cpp
/**
* Copyright (C) 2026 - 2026 Jasonakeke, Inc. All Rights Reserved
*
* @Desc :
* @Time : 2026/6/11 21:59
* @Author : Code_By_Jasonakeke
* @Email : 2284037977@qq.com
* @Class : AdjustBrightnessSlider
* @IDE : CLion
*/
#include <opencv2/opencv.hpp>
#include <windows.h>
#include <string>
// 当前亮度值
int brightValue = 50;
// 对比度
int contrastValue = 50;
cv::Mat dstImg;
std::string utf8ToGBK(std::string utf8String) {
int wlen = MultiByteToWideChar(CP_UTF8, 0, utf8String.c_str(), -1, nullptr, 0);
wchar_t* wstr = new wchar_t[wlen];
MultiByteToWideChar(CP_UTF8, 0, utf8String.c_str(), -1, wstr, wlen);
int glen = WideCharToMultiByte(CP_ACP, 0, wstr, -1, nullptr, 0, nullptr, nullptr);
char* gstr = new char[glen];
WideCharToMultiByte(CP_ACP, 0, wstr, -1, gstr, glen, nullptr, nullptr);
std::string result(gstr);
delete[] wstr;
delete[] gstr;
return result;
}
void adjust(int pos, void* userData) {
// 获取当前滑动条的值
// int currentPos = cv::getTrackbarPos("亮度调节", "亮度调节窗口");
// int currentPos = pos;
cv::Mat img = *static_cast<cv::Mat*>(userData);
int bright = brightValue - 50;
// 映射到0.02 - 2
double contrast = static_cast<double>(contrastValue) / 50;
// 对比度 和亮度
img.convertTo(dstImg, -1, contrast, bright);
cv::imshow(utf8ToGBK("亮度对比度调节窗口"), dstImg);
}
int main(int argc, char* argv[]) {
// 滑动条
// 加载图片
cv::Mat img = cv::imread("../flower.jpg");
if (img.empty()) {
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
// 创建滑动条要绑定的窗口
cv::namedWindow(utf8ToGBK("亮度对比度调节窗口"));
// 创建滑动条
cv::createTrackbar(utf8ToGBK("亮度调节"), utf8ToGBK("亮度对比度调节窗口"),
nullptr, 100, adjust, &img);
cv::createTrackbar(utf8ToGBK("对比度调节"), utf8ToGBK("亮度对比度调节窗口"),
nullptr, 100, adjust, &img);
cv::waitKey(0);
return 0;
}
