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;
}
相关推荐
天辛大师3 小时前
天辛大师浅谈AI时代,“学会学习“本身的内涵也需要被重新定义?
人工智能·深度学习·学习·启发式算法·量子计算
学弟3 小时前
【系列梳理】文档解析系列梳理
人工智能·ocr
幂律智能3 小时前
穿透到合同,管控到付款
大数据·人工智能
今天AI了吗3 小时前
【AI】一文讲清 RAG:从大模型局限到企业级知识库落地流程
前端·javascript·人工智能·python·深度学习·机器学习·easyui
“AI国潮设计-小江”3 小时前
《Python实战 | 用SDXL大模型生成“潮汕英歌舞”国潮IP头像,已申请外观专利,附Prompt思路!》
人工智能·python·prompt·aigc·scikit-learn
Mr数据杨3 小时前
Arxiv论文标题生成实战 从摘要到标题的文本生成建模案例
人工智能·数据分析·kaggle竞赛
martindelophy3 小时前
开源 AI 视频编辑器实战:用 Manifest + Adapter 构建可扩展的生成插件系统
人工智能·开源·音视频
小唔w3 小时前
告别水印烦恼:2026年AI去水印工具实测与梳理
人工智能
人民广场吃泡面3 小时前
DLSS 5 深度解析:当 AI 学会“创造”画面,实时游戏渲染迎来“GPT 时刻”
人工智能·gpt·游戏
行走的小派3 小时前
香橙派高质价比OPi 4系列4款板卡如何匹配不同开发需求
人工智能