خواندن تصویر در OpenCV از مسیر یونیکد

خواندن تصویر در OpenCV از مسیر یونیکد

How to use cv::imread for non-ASCII file names?

چگونه از imread برای نام فایلهای غیراسکی استفاده کنیم؟

یکی از مشکلات نسخه های فعلی OpenCV این است که امکان خواندن از مسیر یونیکد وجود ندارد و اگر مثلا در مسیر فایل یا نام فایل، حروف فارسی وجود داشته باشد، امکان خواندن تصویر وجود ندارد. راه حلی که من استفاده کردم و جواب می دهد قطعه کد زیر است که ابتدا فایل را به صورت یک فایل باینری توسط توابع استاندارد C++ می خوانیم سپس با تابع imdecode بافر حافظه را تبدیل به cv::Mat می کنیم:

cv::Mat ReadImage(const wchar_t* filename)
{
    FILE* fp = _wfopen(filename, L"rb");
    if (!fp)
    {
        return Mat::zeros(1, 1, CV_8U);
    }
    fseek(fp, 0, SEEK_END);
    long sz = ftell(fp);
    char* buf = new char[sz];
    fseek(fp, 0, SEEK_SET);
    long n = fread(buf, 1, sz, fp);
    _InputArray arr(buf, sz);
    Mat img = imdecode(arr, CV_LOAD_IMAGE_COLOR);
    delete[] buf;
    fclose(fp);
    return img;
}

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اسکرول به بالا