OpenCV错误:断言失败(data.dims<=2&&type==CV_32F&&K>0),在未知函数中,文件.....\src\OpenCV\modules\core\src\matrix.cpp,第2485行未知异常
我不明白为什么会这样。我试图改变参数,但无济于事。
你能给我一些解决这个问题的办法吗?
int main(int argc,char*argv[]){
const int countClusters = 2;
vector<string> fileList;
GetFilesInFolder(folder_one, fileList);
vector<bool> trainMask(fileList.size());
InitRandomBoolVector(trainMask, 0.1);
Ptr<FeatureDetector> keypointsDetector = FeatureDetector::create("HARRIS");
Ptr<DescriptorExtractor> descriptorsExtractor = DescriptorExtractor::create("BRIEF");
Mat descriptors;
Mat voc;
TermCriteria tc(TermCriteria::COUNT + TermCriteria::EPS, 10, 0.001);
BOWKMeansTrainer bowTrainer(vocSize,tc);
for(int i = 0;i < filesList.size();i++)
{
if(is_voc.at(i))
{
vector<KeyPoint> keypoints;
Mat image = imread(filesList.at(i));
keypointsDetector->detect(image,keypoints);
descriptorsExtractor->compute(image,keypoints,descriptors);
bowTrainer.add(descriptors);
}
}
try
{
voc = bowTrainer.cluster();
}
catch(std::exception ex)
{
printf(ex.what());
}
return 0;
}
您是否检查了输入到BOWKMeansTrainer中的关键点和描述符是有效的?我想这可能是一个很好的开始。
我能够使用SIFT向BOWKMeansTrainer提供描述符,但不确定是否将其与Harris/Brief一起使用。以下是SIFT方法的代码:
Mat allDescriptors;
SiftDescriptorExtractor detector;
for (int i = 1; i <= 10; i++) {
// get keypoints
vector<KeyPoint> keypoints;
// assuming you have a function intToString that converts your iterator to a string,
// this line creates a file path, e.g. /home/ubuntu/1.jpg to /home.ubuntu/10.jpg
string imagePath = "<put path to your image here>" + "/" + intToString(i) + ".jpg";
Mat imageToUse = imread(imagePath, CV_LOAD_IMAGE_GRAYSCALE); //Load as grayscale
detector.detect(imageToUse, keypoints);
// get descriptors
Mat descriptors;
detector.compute(imageToUse, keypoints,descriptors);
// load descriptors into your descriptor array
allDescriptors.push_back(descriptors);
}
此代码使用SiftDescriptorExtractor进行关键点检测和描述符提取。如果将关键点和描述符保存到文件中,可以看到它们是维度为128*n的垫子。尝试将描述符保存在文件中,并检查它们是否具有所需的维度。
问题内容: 要编译此代码,我可以: 将我的通话置于try / catch块中,或 已经声明它可以抛出一个。 为什么我必须这样做? (示例代码来自Kathy Sierra的SCJP书 。) 我知道引发的异常是已检查的异常,因此我必须处理它,但是在什么情况下需要引发此异常? 问题答案: 如果以一种可以引发检查异常的方式声明方法(不是的子类),则调用该方法的代码必须在一个块中调用它,否则调用者方法必须声
我读了很多关于Java异常处理的帖子,但我确实得到了满意的答案,为什么我要把它们放在我的代码中呢? 我想使用JRE的一些api方法,这些方法是用检查的异常进行的。所以如果我想使用它们,我需要抛出或捕获异常(例如java I/O)。这是在我的类中使用异常的合理规则吗? 我听说了这件事 Java异常处理使错误处理代码与我的业务逻辑分离 在下面的代码段中,分离错误处理的位置在哪里? 3.Java默认的异
获取此语句时出错。deleteEntry(Integer.valueOf); 如果在执行dao.delete项(Integer.valueOf(s))时发生异常;捕捉块不能捕捉异常,因为它捕捉""执行异常"具体而言,因此函数本身应该自动抛出异常,因为它的签名已抛出语句我写的捕捉块是用于处理逻辑处理的,如果我在try捕捉之外写同样的语句,它不会给出任何错误。我想了解这里的行为。请好心帮忙
问题内容: 我想知道为什么spring只处理未检查的异常.....谁能解释这背后的原因是什么。 Spring使用的任何设计模式都可以避免检查异常? 问题答案: Spring使用的任何设计模式都可以避免检查异常? 不是设计模式,而是 异常处理的最佳实践 。 考虑下面的代码: 上面的代码有什么问题? 引发异常后,将暂停正常程序执行,并将控制权转移到catch块。catch块捕获异常并抑制它。在catc
问题内容: 我对使用计算机集群运行Python程序感兴趣。过去我一直在使用Python MPI接口,但是由于在编译/安装这些接口时遇到困难,我更喜欢使用内置模块(例如Python的多处理模块)的解决方案。 我真正想做的就是设置一个跨整个计算机集群的实例,并运行一个。这是可能/容易做到的事情吗? 如果这不可能,那么我至少希望能够从中央脚本在每个节点上为每个节点使用不同参数来启动实例。 问题答案: 如
问题内容: 我试图通过一个数据集中的百万行运行一个函数。 我从数据框中的CSV读取数据 我使用删除列表删除不需要的数据 我通过for循环中的NLTK函数传递它。 码: 现在,我使用for循环调用上述函数,以通过百万条记录运行。即使我在具有24核cpu和88 GB Ram的重型服务器上,我仍然看到循环占用了太多时间,并且没有使用那里的计算能力 我正在这样调用上面的函数 当我们有几百万条记录时,上面的