java力矩_OpenCV(C):计算轮廓的力矩

这是我的代码:

#include "highgui.h"

#include "cv.h"

#include

// this code finds contours

int main (int argc, char* argv[]) {

cvNamedWindow( argv[0], 1 );

IplImage* img_8uc1 = cvLoadImage( argv[1], CV_LOAD_IMAGE_GRAYSCALE );

IplImage* img_edge = cvCreateImage( cvGetSize(img_8uc1), 8, 1);

IplImage* img_8uc3 = cvCreateImage( cvGetSize(img_8uc1), 8, 3);

cvThreshold( img_8uc1, img_edge, 128, 255, CV_THRESH_BINARY );

CvMemStorage* storage = cvCreateMemStorage();

CvSeq* first_contour = NULL;

int Nc = cvFindContours(img_edge, storage, &first_contour,

sizeof(CvContour), CV_RETR_LIST );

int n = 0;

printf("Total Contours Detected: %d\n", Nc);

CvSeq* c=first_contour;

for( c; c!=NULL; c=c->h_next ) {

cvCvtColor( img_8uc1, img_8uc3, CV_GRAY2BGR );

cvDrawContours(img_8uc3, c,

CV_RGB(250,0,0), //red

CV_RGB(0,0,250), //blue

0,2,8);

printf("Contour #%d\n", n);

cvShowImage( argv[0], img_8uc3 );

printf(" %d elements:\n", c->total );

for( int i=0; itotal; ++i) {

CvPoint* p = CV_GET_SEQ_ELEM(CvPoint, c, i);

printf(" (%d,%d)\n", p->x, p->y);

}

cvWaitKey(0);

n++;

}

// moments

CvMoments* Moments;

CvHuMoments *HuMoments;

// calculate moments; calculate humoments

cvContourMoments(c, Moments);

cvGetHuMoments(Moments, HuMoments);

//print the hu moments

printf("Hu Moment hu1: %.12f", HuMoments->hu1);

printf("Hu Moment hu2: %.12f", HuMoments->hu2);

printf("Hu Moment hu3: %.12f", HuMoments->hu3);

printf("Hu Moment hu4: %.12f", HuMoments->hu4);

printf("Hu Moment hu5: %.12f", HuMoments->hu5);

printf("Hu Moment hu6: %.12f", HuMoments->hu6);

printf("Hu Moment hu7: %.12f", HuMoments->hu7);

printf("Finished all contours.\n");

cvCvtColor(img_8uc1, img_8uc3, CV_GRAY2BGR);

cvShowImage(argv[0], img_8uc3);

cvWaitKey(0);

cvDestroyWindow(argv[0]);

cvReleaseImage(&img_8uc1);

cvReleaseImage(&img_8uc3);

cvReleaseImage(&img_edge);

return 0;

}

基本上,代码的前半部分和代码的最后几行直接取自“学习OpenCV”一书,因为它已经完成轮廓查找并且它是我想要的(不是抄袭,我正在尝试一些东西),代码的中间部分(如文档所述)专门用于计算Hu Moments . 我想试着看一下具有轮廓的特定图像,不同方向或图像尺寸变化时是否有任何力矩值变化 .

我以为我用正确的方式写了这个,至少算法对我来说似乎是正确的,但我不断收到此错误消息:

OpenCV错误:cvMoments中的空指针(),文件/build/buildd/opencv-2.1.0/src/cv/cvmoments.cpp,第343行终止在抛出'cv :: Exception'的实例后调用what():/ build / buildd / opencv-2.1.0 / src / cv / cvmoments.cpp:343:错误:( - 27)在函数cvMoments中

中止

我是如何使用CvMoments数据结构的问题,还是问题与CvContourMoments()函数有关?我目前使用的OpenCV版本是2.1.0 .

我很感激帮助!我无法在互联网上的任何地方找到这样的解决方案,我想知道是否有人有类似的问题与轮廓的时刻计算 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值