gpt4 book ai didi

opencv - OpenCV:cvContourBoundingRect给出 “Symbol Not Found”,而其他轮廓函数可以正常工作

转载 作者:行者123 更新时间:2023-12-02 17:54:28 25 4
gpt4 key购买 nike

注意:StackOverflow不会让我回答自己的问题,所以我在这里回答。请滚动到底部以查看我的答案。


给定一个二进制图像,我希望能够确定哪个区域的y坐标最大,即哪个区域最靠近底部。在下面的函数中,我尝试使用轮廓和边界矩形来获得所需的答案。但是,我对函数cvContourBOundingRect的使用在编译过程中引起以下错误消息:

"_cvContourBoundingRectemphasized", referenced from: 
GetLowestContourBoundingRectangle(_IplImage * img, bool)
in main.o. Symbol(s) not found. Collect2: Id returned 1 exit status.
Build Failed.

这很奇怪,因为我已经成功使用了cvFindContours和cvContourArea等其他轮廓函数而没有任何麻烦。我尝试在Google上进行一些搜索,但没有任何结果。如果有人能指出正确的方向,我将不胜感激。

提前致谢。
CvRect GetLowestContourBoundingRectangle(IplImage *img, bool invertFlag) {
// NOTE: CONTOURS ARE DRAWN AROUND WHITE AREAS
IplImage *output = invertFlag ? cvCloneImage(InvertImage(img)) : cvCloneImage(img); // this goes into find contours and is consequently modified

// find contours
CvMemStorage *contourstorage = cvCreateMemStorage(0);
CvSeq* contours = NULL;
cvFindContours(output, contourstorage, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);

// analyze each contour
int lowestRectangleCoordinate = 0;
CvRect currentBoundingRectangle;
CvRect lowestBoundingRectangle;

while (contours) {
currentBoundingRectangle = cvContourBoundingRect(contours);
if (currentBoundingRectangle.y + currentBoundingRectangle.height > lowestRectangleCoordinate) {
lowestRectangleCoordinate = currentBoundingRectangle.y + currentBoundingRectangle.height;
lowestBoundingRectangle = currentBoundingRectangle;
}

contours = contours->h_next;
}

cvReleaseMemStorage(&contourstorage);
return lowestBoundingRectangle;
}

回答:
好吧,具有讽刺意味的是,我起草了最初的问题后,发现它为什么很快就被打破了(尽管公平地说,我已经为此花了几个小时的时间)。

我查找了定义以下三个功能中的每个功能的头文件:
  • cvFindContours-imgproc_c.h
  • cvContourArea-imgproc_c.h
  • cvContourBoundingRect-compat.hpp

  • compat.hpp显然用于不推荐使用的功能,这些功能为了向后兼容而保留。以下是 header 中写的内容:
    /*
    A few macros and definitions for backward compatibility
    with the previous versions of OpenCV. They are obsolete and
    are likely to be removed in future. To check whether your code
    uses any of these, define CV_NO_BACKWARD_COMPATIBILITY before
    including cv.h.
    */

    话虽如此,有谁知道我实际上可以如何使用非过时的定义来编写此函数?

    最佳答案

    关于您的原始问题“OpenCV:cvContourBoundingRect给出“找不到符号””。

    用于与该(不推荐使用)方法链接的库是此库:

    libopencv_legacy.so

    关于opencv - OpenCV:cvContourBoundingRect给出 “Symbol Not Found”,而其他轮廓函数可以正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359810/

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