gpt4 book ai didi

c++ - push_back Mat in another Mat时访问违规读取位置

转载 作者:行者123 更新时间:2023-11-28 04:22:35 26 4
gpt4 key购买 nike

我想编写简单的代码来提取 HOG 特征,然后训练 SVM。但是这个异常发生了,我尝试了不同的 OpenCV 版本,比如 3.4.5 和 4.0,但没有什么不同。

cv::HOGDescriptor hogDetector = cv::HOGDescriptor();
hogDetector.winSize = cv::Size(256, 256);
hogDetector.blockSize = cv::Size(64, 64);
hogDetector.blockStride = cv::Size(192, 192);
hogDetector.cellSize = cv::Size(32, 32);

函数返回 HOG 特征:

cv::Mat computeHOG(cv::Mat img)
{
std::vector<float> descriptors;
std::vector<cv::Point> locations;
hogDetector.compute(img, descriptors, cv::Size(8, 8), cv::Size(0, 0), locations);
cv::Mat row = cv::Mat(descriptors);
return row;
}

和提取特征的主要代码:

cv::Mat trainFeatures;
cv::Mat trainLables;
while (!PFile.eof())
{
std::string name; std::getline(PFile, name);
std::vector<std::string> parts = splitString(name, ' ');
cv::Mat img = cv::imread(basePath + parts[0]);
cv::cvtColor(img, img, cv::COLOR_BGR2GRAY);
cv::resize(img, img,cv::Size(1250, 320));
cv::Mat f = computeHOG(img);
trainFeatures.push_back(f);
trainLables.push_back(std::stoi(parts[1]));
}

异常发生在 trainFeatures.push_back(f); 行,f 形状为 1 * 1 * 162000

完全异常(exception):

Exception thrown at 0x00007FFF5A9C17E5 (opencv_world345d.dll) in vehicleRecognition.exe: 0xC0000005: Access violation reading location 0x000002A830658140.

最佳答案

在调试中我发现 f Mat(HOG 特征)是 FLOAT32 但 trainFeatures 是 UINT8,首先我将 cv::Mat trainFeatures; 更改为 cv::Mat trainFeatures = cv::Mat1f (); 但没有区别,再次将其更改为 cv::Mat trainFeatures = cv::Mat(1, 162000,CV_32FC1); 并解决问题。并更改行:row = row.reshape(1, 1);

我不知道为什么修复了这个问题,而且很奇怪为什么 OpenCV 自动无法检测到它。如果您有更好的解决方案,请写下来。

关于c++ - push_back Mat in another Mat时访问违规读取位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55084888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com