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;
}
相关推荐
kuokay1 小时前
MLOps 与 AIOps 的核心概
人工智能·分布式·大模型·agent·llama
佛系豪豪吖1 小时前
一台 Lighthouse 撑起 AI 全栈工作流:OpenClaw + 腾讯云生态深度实战
人工智能·经验分享·云计算·腾讯云·授权网关
实在智能RPA1 小时前
机组排班RPA自动化采集:2026年AI Agent驱动下的跨系统协同与高精度落地实践
人工智能·ai·自动化·rpa
叫我:松哥1 小时前
基于深度学习的辣椒叶片病害识别系统设计实现,融合CBAM注意力机制的改进ResNet-50模型和YOLO检测,准确率达96%
图像处理·人工智能·深度学习·yolo·flask·bootstrap·注意力机制
器灵科技1 小时前
周星驰 × 火山引擎官宣!Seedance 正版 IP 二创正式上线
人工智能·阿里云·ai·github·火山引擎
June`1 小时前
CUDA执行模型深入刨析
c++·人工智能·cuda
ylscode1 小时前
qwenpaw全栈升级实测:插件市场、小米MiMo接入与多端渠道闭环
人工智能
kisdiem1 小时前
多轮对话不只是“记住聊天记录”
人工智能
-Thinker1 小时前
AI 算法核心原理与实现
人工智能·算法·机器学习