我正在尝试对图像执行一些操作,我必须将图像保存到csv文件,然后将其加载到显示器。我正在使用opencv 3,其中CvMLData似乎没有按照本例here.中的说明工作,我想3.2版本的功能已经改变。
CvMLData mlData;
mlData.read_csv("cameraFrame1.csv");
const CvMat* tmp = mlData.get_values();
cv::Mat img(tmp, true);
// set the image type
img.convertTo(img, CV_8UC3);
// set the image size
cv::resize(img, img, cv::Size(320, 256));
tmp->CvMat::~CvMat();
std::cout << "img: " << img << std::endl;
cv::namedWindow("img");
cv::imshow("img", img);
cv::waitKey(0);
答案 0 :(得分:3)
是的,您显示的代码是针对OpenCV 2的,机器学习内容都在OpenCV 3中移动。可能值得阅读Transistion Guide
下面的代码和图片显示了如何将矩阵写入csv文件,重新读取,调整大小并将所有三个矩阵显示到窗口。
使用此代码:
#include <fstream>
void examplethree()
{
cv::Mat mat = imread("mypic.png");
imshow("window", mat);
ofstream outputFile("cameraSamples.csv");
outputFile << format(mat, cv::Formatter::FMT_CSV) << endl;
outputFile.close();
cv::Mat img;
cv::Ptr<cv::ml::TrainData> raw_data = cv::ml::TrainData::loadFromCSV("cameraSamples.csv", 0, -2, 0);
cv::Mat data = raw_data->getSamples();
// optional if you have a color image and not just raw data
data.convertTo(img, CV_8UC3);
img = img.reshape(3); //set number of channels
// set the image type
img.convertTo(img, CV_8UC3);
// set the image size
cv::resize(img, img, cv::Size(320, 256));
//std::cout << "img: " << img << std::endl;
cv::namedWindow("img");
cv::imshow("img", img);
cv::imshow("mat", mat);
cv::waitKey(0);
}