获取cv::Mat的值
getting the values of cv::Mat
我有一个程序,我在其中计算多个帧的平均值,当我保存这个平均值时,它是一个帧,我得到了965KB的文件,但我对SCILAB做了同样的事情,它基于OpenCV,我得到5.93MB,听起来更合乎逻辑。无论如何,我决定用fwrite写我的帧,这里做了什么:
cv::Mat meanFrame= cv::Mat::zeros(height,width,CV_32FC3);
cv::Mat frameR;
FILE* inpR = NULL;
...... //after calculating the meanFrame
inpR = fopen("d:\red.txt","wb+");
for(int row = 0; row < meanFrame.rows; ++row) {
for (int col = 0; col < meanFrame.cols; ++col) {
std::cout << meanFrame.at<cv::Vec3f>(row, col)[1] <<std::endl;
std::cout << meanFrame.at<cv::Vec3f>(row, col)[2] <<std::endl;
fwrite(&resultframe.at<cv::Vec3f>(row,col )[0],sizeof(float),1,inpR);
}
}
fcloseall();
我可以看到pf通道1和2,但当我打开文件red.txt时,我得到:
€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€.......
不知道我在这里缺少了什么,之后我想在SCILAB中加载这些文件,然后将帧保存为文件。谢谢你的帮助!
您正在编写二进制数据-浮点是如何存储在内存中的。
当您查看文件(在编辑器或命令行中)时,它会认为这是文本数据,并试图将其解释为字符。
如果你需要将这些值读取到另一个程序中,那么你可以使用fwrite和fread(尽管如果你有不同的CPU,你可能会遇到字节排序问题)
如果你只是想看到结果,或者想把它们读到另一个程序中做更多的工作,你可以用打印值
printf("%f", resultframe.at<cv::Vec3f>(row,col )[0]);
相关文章:
- 数组索引的值没有增加
- 'short int'持有的值溢出,但"自动"不会溢出?
- 是默认情况下分配给char数组常量的值
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 为什么我无法更改"set<set>"循环中的值<int>
- 有效地使用std::unordered_map来插入或增加键的值
- <streamsize>C++ 中 numeric_limits::max() 的值
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 无法获取webot::PositionSensor对象中位置传感器的值
- 两个垫子的 OpenCV 数据是相同的,但使用 Mat::at 检索时的值已损坏
- openCV Mat 中的值在自定义类构造函数中设置后不会保留
- 获取 2 暗淡 cv::Mat 的非零元素的值
- 如何将像素设置为cv::Mat对象中的值
- 如何从C++中的矩阵 (Mat) 返回特定值的索引
- cv::Mat,在不知道矩阵类型的情况下获取行-列的值
- 如何修改cv::Mat类(16UC1)中某个位置的值
- 了解Mat元素Opencv的值
- 将cv::Scalar的值设置为opencv中cv::Mat中的一个像素的正确(最佳)方法是什么?
- 获取cv::Mat的值
- 将.mat文件中的值输入到C++中的数组中