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;
}
相关推荐
IT_Octopus13 小时前
【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
人工智能·python·langchain
2603_9651481113 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
LiuPig刘皮哥13 小时前
2026年开源3D陪玩对比:xiaoke.ai、AIRI、Open-LLM-VTuber、Amica 有什么、没有什么
人工智能·3d·开源
西柚小萌新13 小时前
【岗位面试】--成都博维数孪 - 工业 AI 解决方案顾问
人工智能·面试·职场和发展
Luminbox紫创测控14 小时前
车载LiDAR强光测试的实验设计方法与数据分析
人工智能·数据挖掘·数据分析·车载系统·安全性测试·太阳光模拟器
硅谷秋水15 小时前
CommitFlow:面向长时程机器人操作 VLA 执行的语义承诺验证与局部修正
机器学习·计算机视觉·语言模型·机器人
建筑工程企业管理系统15 小时前
工程进度统计管理系统自动化汇总数据,解决施工企业手工对账误差难题
大数据·人工智能·自动化
唠点键盘之外的15 小时前
27 存量系统接大模型:旁挂一个 AI 微服务,老架构一行不改
人工智能·微服务·架构
kaixin_啊啊15 小时前
【用于更准确 G×E 基因组预测的大规模作物数据集与基于深度学习的多模态融合框架】论文学习
人工智能·深度学习·学习
GOWIN革文品牌咨询15 小时前
工业测量品牌系统化搭建指南:从内容架构到长期治理的全流程
大数据·人工智能·架构