C++ create,file/home/m/OpenCV/modules/core/src/matrix_wrap.cpp,第1461行中的空指针(为缺少的输出数组调用create())

C++ create,file/home/m/OpenCV/modules/core/src/matrix_wrap.cpp,第1461行中的空指针(为缺少的输出数组调用create()),c++,pointers,runtime-error,ubuntu-16.04,opencv3.0,C++,Pointers,Runtime Error,Ubuntu 16.04,Opencv3.0,我试图运行O'reilly的书中的标记为连接组件的绘图示例,但在运行时我收到以下错误消息(我构建源代码时没有问题): #包括 #包括 #包括 使用名称空间std; //使用名称空间cv; int main(int argc,char*argv[]) { cv::Mat img、img_边缘、标签、img_颜色、统计信息; //如果未提供图像,请加载图像或显示帮助 if(argc!=2 | |(img=cv::imread(argv[1],0)).empty() { cout使用调试器表明,在调用

我试图运行O'reilly的书中的
标记为连接组件的绘图示例,但在运行时我收到以下错误消息(我构建源代码时没有问题):

#包括
#包括
#包括
使用名称空间std;
//使用名称空间cv;
int main(int argc,char*argv[])
{
cv::Mat img、img_边缘、标签、img_颜色、统计信息;
//如果未提供图像,请加载图像或显示帮助
if(argc!=2 | |(img=cv::imread(argv[1],0)).empty()
{

cout使用调试器表明,在调用connectedComponentsWithStats()时会出现此异常。错误描述推断这是因为存在不应该是这种方式的空/空值

OpenCV显示第四个参数,质心,应该是一个 CV_64F矩阵有两列和“质心”行数。只要函数存在,该矩阵可能由函数本身初始化

因此,您只需创建此矩阵,并按照函数的预期提供它:

cv::Mat centroids;
int i, nccomps = cv::connectedComponentsWithStats (img_edge, labels, stats, centroids);

您的问题在于使用OpenCV 3.4.1(最新版本)与您正在使用的书相比,它在语法上发生了变化;这是任何开源库都会遇到的常见问题。我建议您保留当前的OpenCV文档,以确保书中的代码仍然有效,或者降级到旧版本。

谢谢Dany,但是我可以问一下您是否知道这行代码中的
CC\u STAT\u区域
e
如果(stats.at(i-1,cv::CC_STAT_AREA)<100)
,并且在执行代码时将被替换为什么?连接组件的总面积(以像素为单位)。您可以在正式文档中随时检查这些内容,它有一个搜索框来搜索这些内容。()
cv::Mat centroids;
int i, nccomps = cv::connectedComponentsWithStats (img_edge, labels, stats, centroids);