相关疑难解决方法(0)

在OpenCV中查找轮廓?

从图像中检索轮廓时,每个斑点应获得2个轮廓 - 一个内部轮廓和一个外部轮廓.考虑下面的圆圈 - 由于圆是一条像素宽度大于1的线,您应该能够在图像中找到两个轮廓 - 一个来自圆的内部,一个来自外部.

使用OpenCV,我想检索INNER轮廓.但是,当我使用findContours()时,我似乎只是在获得外部轮廓.如何使用OpenCV检索blob的内部轮廓?

我使用的是C++ API,而不是C,因此只建议使用C++ API的函数.(即findContours()而不是cvFindContours())

谢谢.

在此输入图像描述

c++ opencv image image-processing shape

14
推荐指数
1
解决办法
5万
查看次数

了解层次结构,来自 findContours opencv

我试图从 opencv c++ 中了解 Hierarchy 和 findContours,但我发现这很困难。

我确实在这里解决了这个问题,但我仍然无法清楚地了解它。我尝试在不同的示例中使用它,使用以下示例图像

在此处输入图片说明

对于上图,运行以下代码,

    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>

    using namespace cv;
    using namespace std;

    Mat src; Mat src_gray;
    int thresh = 100;
    int max_thresh = 255;
    RNG rng(12345);

    void thresh_callback(int, void* );

    /** @function main */
    int main( int argc, char** argv )
    {
            src = imread( argv[1], 1 );
            cvtColor( src, src_gray, CV_BGR2GRAY );
            blur( src_gray, src_gray, Size(3,3) );

            String source_window = "Source";
            namedWindow( …
Run Code Online (Sandbox Code Playgroud)

c++ opencv opencv-contour

7
推荐指数
1
解决办法
6863
查看次数

如何使用cv :: findcontours和层次结构查找内孔的数量

我需要在下面的图像中找到内孔的数量.我的最终要求是使用opencv中的轮廓层次来检测和找到圆形黑洞的区域.不需要使用任何其他算法.

基于此链接在OpenCV中使用findContours()中的层次结构?我试过但它不起作用.

有没有其他方法可以找到图像中没有孔?

在这里,我已经附加了样本图像和代码.任何人都可以使用层次结构单独找到内部黑洞.我对轮廓层次结构没有太多经验.谢谢.我使用opencv c ++ lib.

<code>在此处输入图像说明</ code>

cv::Mat InputImage = imread("New Image.jpg");
int Err;

if(InputImage.empty() == 1)
{
    InputImage.release();
    cout<<"Error:Input Image Not Loaded"<<endl;
    return 1;
}
cv::Mat greenTargetImage;

std::vector<cv::Mat> Planes;
cv::split(InputImage,Planes);

greenTargetImage = Planes[1];
cv::Mat thresholdImage = cv::Mat (greenTargetImage.size(),greenTargetImage.type());
cv::threshold(greenTargetImage,thresholdImage,128,255,THRESH_OTSU);
imwrite("thresholdImage.jpg",thresholdImage);

std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(thresholdImage,contours,hierarchy,cv::RETR_CCOMP,cv::CHAIN_APPROX_SIMPLE,cv::Point(-1,-1));
cout<<contours.size()<<endl;
cout<<hierarchy.size()<<endl;
int count = 0;
if (!contours.empty() && !hierarchy.empty())
{
    for (int i = 0;i<contours.size();i++ )
    {
        if ( hierarchy[i][3] != -1)
        {
            cv::drawContours(InputImage,contours,i,CV_RGB(0,255,0),3);
            count = count+1;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing

5
推荐指数
1
解决办法
7536
查看次数

标签 统计

c++ ×3

opencv ×3

image-processing ×2

image ×1

opencv-contour ×1

shape ×1