c – 无法从cv :: imencode中获取编码图像(变得混乱).如何修复.j
发布时间:2020-12-16 07:27:46 所属栏目:百科 来源:网络整理
导读:所以我尝试通过 cv::imencode apis将图像保存到ostream中.从imencode我们得到矢量.作为 shown here,它可以存储在任何ostream中.例如std :: ofstream.但它没有破坏数据=( 这就是我们所看到的: 这是我们在文件中得到的: 这是我们的代码: #include iostream#
所以我尝试通过
cv::imencode apis将图像保存到ostream中.从imencode我们得到矢量.作为
shown here,它可以存储在任何ostream中.例如std :: ofstream.但它没有破坏数据=(
这就是我们所看到的: 这是我们在文件中得到的: 这是我们的代码: #include <iostream> #include <fstream> #include <vector> #include <map> #include <string> #include <ctime> #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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |