如果 Mat 对象不在数据变量中,它将数据存储在哪里?
Where does a Mat object store its data if it's not in data variable?
我需要将图像数据从Mat对象(OpenCV(传输到ZXing::ImageView对象内的const unsigned char*
;通常,我只使用(假设对象名为"对象"(object.data
,风险自负,如果传输出现问题,则从那里开始。但是,在这种情况下,数据成员变量为空。这个Mat对象确实生成了一个带有imshow
的图像,所以我不确定还能去哪里看。我已经阅读了这些文件,但我有限的经验和知识的缺乏使我无法以合理的速度或相关的方向有效地阅读。这是我的代码:
#include <opencv2/opencv.hpp>
#include <ZXing/ReadBarcode.h>
using namespace cv;
Mat applyThreshold(Mat gradient);
Mat erodeAnddilate(Mat threshold_applied);
void readBarCode(Mat dest);
int main() {
std::string file = "C:\Users\these\Desktop\cropped.JPG";
namedWindow("imageview", WINDOW_NORMAL);
Mat src = imread(file, IMREAD_COLOR);
Mat thresh_applied = applyThreshold(src);
Mat dest = erodeAnddilate(thresh_applied);
readBarCode(dest);
imshow("imageview", dest);
waitKey(0);
return 0;
}
Mat applyThreshold(Mat gradient) {
Mat dest, gray;
cvtColor(gradient, gray, COLOR_BGR2GRAY);
threshold(gray, dest, 0, 255, THRESH_BINARY + THRESH_OTSU);
return dest;
}
Mat erodeAnddilate(Mat threshold_applied) {
Mat dest;
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
morphologyEx(threshold_applied, dest, MORPH_CLOSE, kernel, Point(-1, -1), 2);
return dest;
}
void readBarCode(Mat dest) {
ZXing::ImageView test(dest.data, dest.size().width, dest.size().height, ZXing::ImageFormat::None);
ZXing::Result truth = ZXing::ReadBarcode(test);
int momentoftruth = 0;
}
函数readBarCode()
就是问题所在。为其他地方可能糟糕的代码道歉,我还有很多东西要学。:(
编辑:公认的解决方案是唯一一个官方给出的解决方案,但所有的评论都帮助我意识到了我在思考有问题的数据变量时的错误。我现在将数据变量视为一个指针,并将考虑浅拷贝与深度拷贝作为一种潜在的解决方案。我对我的Mat对象有了更好的了解,并认为我的问题已经得到了回答。谢谢大家。
尝试将对Mat
对象的引用传递给函数,或者如果您想复制数据以创建新图像,请显式使用clone()
方法来获得图像的深度副本。
如:
Mat applyThreshold(Mat& gradient) {
Mat dest, gray;
cvtColor(gradient, gray, COLOR_BGR2GRAY);
threshold(gray, dest, 0, 255, THRESH_BINARY + THRESH_OTSU);
return dest;
}
或:
// ...
Mat thresh_applied = applyThreshold(src.clone());
// ...
相关文章:
- 将从格式化文本文件读取的文本数据存储到链表
- 将线程中的数据存储到全局容器的最佳方法?
- 将数据存储在内存中以供以后访问
- 将一个阵列中的数据存储到另外两个阵列中不起作用
- 如何将函数的输出数据存储在文本文件中
- 将结构数据存储在循环缓冲区中
- 安卓中的Qt和应用程序数据存储
- C++ 将数据存储在对齐数组的中间
- 如何删除字符串中的所有空格并将数据存储在两者之间
- 实现双链接列表,其中数据存储在堆上
- 是否有一种方法可以从文本文件中读取并将单个数据存储为不同的变量
- 了解字符数组初始化和数据存储
- 如何在C++中将字符串数据存储在字符串 2D 数组中
- 将数据存储在具有可互换 x/y 坐标的 2D 矩阵中
- 将文件中的数据存储到数组中
- 将数据存储到地图
- 保存和加载类数据存储在C 中的二进制文件中
- 将由结构构建的数组传递到将数据存储到文件中的函数
- 在这种情况下,将数据存储在诸如SQLite之类的数据库中,还是存储在平面文本文件中更好
- 将数据存储在char数组中导致变量周围损坏