将 opencv mat 保存为不带分隔符的十六进制值到 txt 文件
saving an opencv mat to txt file as hex values without separators
我正在尝试将包含图像像素的 OpenCV 垫保存到 txt 文件(之后将导入到 VHDL 测试平台以进行进一步处理)。
我需要文件只包含像素值而不包含任何其他信息,并且我需要它是十六进制的。也没有任何分隔符,如逗号、分号等。
到目前为止我想到的是:
cv::Mat srcImage;
srcImage = imread("image.jpg", 1);
if (srcImage.empty())
{
cout << "ERROR : Image cannot be loaded..!!" << endl;
return -1;
}
cv::FileStorage file("data.txt", cv::FileStorage::WRITE);
file <<"srcImage"<<srcImage;
输出文本文件包含我不需要的所有内容。
我尝试了所有组合以写入十六进制值但失败了...
有人能帮忙吗?
谢谢
如果您的图像是灰色的 ('one channel 8 bit depth')
for (int y=0; y< srcImage.rows; ++y) {
for (int x=0; x < srcImage.cols; ++x) {
file << srcImage .at<uchar>(y,x);}}
else 将 "at" 函数的数据类型更改为 Vec3b
if 3 channel
您不能使用 cv::FileStorage
执行此操作。您可以根据需要使用 std::ofstream
:
将数据保存到文件中
#include <opencv2\opencv.hpp>
#include <iostream>
#include <iomanip>
using namespace std;
using namespace cv;
int main()
{
Mat3b img(3, 4, Vec3b(15,14,12));
randu(img, Scalar(0, 0, 0), Scalar(256, 256, 256));
// Save to Hex ASCII
ofstream out("data.txt");
for (int r = 0; r < img.rows; ++r) {
for (int c = 0; c < img.cols; ++c) {
const Vec3b& v = img(r, c);
out << hex << uppercase << setw(2) << setfill('0') << int(v[0]);
out << hex << uppercase << setw(2) << setfill('0') << int(v[1]);
out << hex << uppercase << setw(2) << setfill('0') << int(v[2]);
}
}
return 0;
}
我正在尝试将包含图像像素的 OpenCV 垫保存到 txt 文件(之后将导入到 VHDL 测试平台以进行进一步处理)。
我需要文件只包含像素值而不包含任何其他信息,并且我需要它是十六进制的。也没有任何分隔符,如逗号、分号等。
到目前为止我想到的是:
cv::Mat srcImage;
srcImage = imread("image.jpg", 1);
if (srcImage.empty())
{
cout << "ERROR : Image cannot be loaded..!!" << endl;
return -1;
}
cv::FileStorage file("data.txt", cv::FileStorage::WRITE);
file <<"srcImage"<<srcImage;
输出文本文件包含我不需要的所有内容。 我尝试了所有组合以写入十六进制值但失败了...
有人能帮忙吗?
谢谢
如果您的图像是灰色的 ('one channel 8 bit depth')
for (int y=0; y< srcImage.rows; ++y) {
for (int x=0; x < srcImage.cols; ++x) {
file << srcImage .at<uchar>(y,x);}}
else 将 "at" 函数的数据类型更改为 Vec3b
if 3 channel
您不能使用 cv::FileStorage
执行此操作。您可以根据需要使用 std::ofstream
:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <iomanip>
using namespace std;
using namespace cv;
int main()
{
Mat3b img(3, 4, Vec3b(15,14,12));
randu(img, Scalar(0, 0, 0), Scalar(256, 256, 256));
// Save to Hex ASCII
ofstream out("data.txt");
for (int r = 0; r < img.rows; ++r) {
for (int c = 0; c < img.cols; ++c) {
const Vec3b& v = img(r, c);
out << hex << uppercase << setw(2) << setfill('0') << int(v[0]);
out << hex << uppercase << setw(2) << setfill('0') << int(v[1]);
out << hex << uppercase << setw(2) << setfill('0') << int(v[2]);
}
}
return 0;
}