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 EncodingProject EncodingDefault 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;
}
相关推荐
码农学院13 小时前
如何组建一支高效的GEO优化团队:角色、流程与工具选型
人工智能
2zcode14 小时前
项目文档:基于MATLAB的肺结节自动分割与评估系统的设计与实现
人工智能·计算机视觉·matlab
老余说AI14 小时前
AI 时代的劳动力重构:Forward Deployed Engineer (FDE) 的崛起、本质与破局之路
人工智能·ai
明志数科14 小时前
10万小时UMI预训练验证Scaling Law:机器人策略模型的数据范式变革
人工智能·科技·机器人
武子康14 小时前
Inkling 975B 说明“开放权重“与“普通开发者本地运行“已经分离,内容重点应是部署容量和运行时边界
前端·人工智能·后端
百度Geek说14 小时前
图灵平台:万亿级轨迹数据的秒级检索实战
人工智能
不爱土豆唯爱马铃薯14 小时前
从零开发应用实操:我用AI工具10分钟做出了番茄钟计时器
人工智能
2601_9583529015 小时前
一颗模组搞定回音+AI降噪+远场拾音+双麦定向,A-29P让音频通话产品“卷“到新高度
人工智能·硬件开发·回声消除·语音模块·通话对讲·拾音降噪
xiaowang1234shs15 小时前
怪兽轻断食技术深度测评:从断食计时引擎到AI识别算法的工程实践解析
数据库·人工智能·算法·macos·机器学习·p2p·visual studio
Nturmoils15 小时前
哪个服务在跑我自己都说不清,干脆让 doubao-seed-evolving 给我撸了个服务管理器
人工智能