CLion + OpenCV + Utf8 终极解决方案

下载安装 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;
}
相关推荐
Flynn Liang17 分钟前
AI 应用的安全红线:Spring AI 下的 Prompt 注入防护、PII 脱敏、输出审计与密钥管理
人工智能·安全·spring·数据泄露·springai·prompt注入
朗迪锋22 分钟前
SoErgo重塑“四特”场景下的人机协同与安全边界
人工智能·安全·人机工程
stormzhangV29 分钟前
未来十年的建议
人工智能·aigc·agent
深圳行云创新42 分钟前
智能体架构之争:单Agent加Skills,还是多加几个Agent
人工智能·架构·软件工程
用户360055579001 小时前
Kestrel_VLLM - 31 · MTP 头上 GPU:一个独立槽位,与一条抽出来共用的注意力
人工智能
老金带你玩AI1 小时前
Codex改了又测、测了又改,我一查Token才发现这个坑
人工智能
IT_陈寒1 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
刘胡子大叔1 小时前
评测驱动优化:失败样本回流 Prompt 的闭环
人工智能·prompt
这个DBA有点耶1 小时前
内核级AI与多模融合:AI数据库在海外场景的落地要点
数据库·人工智能·架构