C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 无法从cv :: imencode中获取编码图像(变得混乱).如何修复.jpg的破损保存?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我尝试通过 cv::imencode apis将图像保存到ostream中.从imencode我们得到矢量.作为 shown here,它可以存储在任何ostream中.例如std :: ofstream.但它没有破坏数据=(

这就是我们所看到的:

这是我们在文件中得到的:

这是我们的代码

#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <String>
#include <@R_673_10503@e>
#include <iterator>

#include <opencv2/opencv.hpp>



void send_data(std::ostream & o,const std::vector<uchar> & v)
{
    o.write(reinterpret_cast<const char*>(v.data()),v.size());
}

int main(  )
{
    int w=400,h=400;
    cv::Mat black = cv::Mat::zeros(cv::Size(w,h),CV_8UC3);

    {
        for(int i = 0; i <= 35; ++i)
        {
            for (int k = 0; k <=35; ++k)
            {
                black.row(i).col(k) = 255;
            }
        }

        for(int i = 10; i <= 15; ++i)
        {
            for (int k = 10; k <=15; ++k)
            {
                black.row(i).col(k) = 0;
            }
        }

        for(int i = 25; i <= 30; ++i)
        {
            for (int k = 25; k <=30; ++k)
            {
                black.row(i).col(k) = 0;
            }
        }

        for(int i = 25; i <= 75; ++i)
        {
            for (int k = 25; k <= 75; ++k)
            {
                black.row(i).col(k) = 255;
            }
        }

        for(int i = 35; i <= 65; ++i)
        {
            for (int k = 35; k <=65; ++k)
            {
                black.row(i).col(k) = 0;
            }
        }

        for(int i = 57; i <= 62; ++i)
        {
            for (int k = 57; k <=62; ++k)
            {
                black.row(i).col(k) = 255;
            }
        }

        for(int i = 90; i <= 99; ++i)
        {
            for (int k = 90; k <=99; ++k)
            {
                black.row(i).col(k) = 255;
            }
        }
    }


    cv::namedWindow( "Components",CV_WINDOW_AUTOSIZE );
    cv::imshow( "Components",black );

    std::vector<uchar> buff;

    std::vector<int> p;
    p.push_BACk(CV_IMWRITE_JPEG_QUALITY);
    p.push_BACk(9);

    cv::imencode(".jpg",black,buff);

    std::ofstream outfile ("test.jpg");
    send_data(outfile,buff);
    outfile.close();

    cv::waitKey(0);
    std::cin.get();
    return 0;
}

解决方法

您需要以二进制模式打开输出文件.

std::ofstream outfile ("test.jpg",std::ofstream::binary);

大佬总结

以上是大佬教程为你收集整理的c – 无法从cv :: imencode中获取编码图像(变得混乱).如何修复.jpg的破损保存?全部内容,希望文章能够帮你解决c – 无法从cv :: imencode中获取编码图像(变得混乱).如何修复.jpg的破损保存?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。