- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一个在二进制图像中找到轮廓并过滤掉小轮廓的函数。
这是我的代码和示例图像。这是一个 super 简单的功能,可以去除小面积的 Blob 。但我不断得到“边缘轮廓”而不是区域轮廓。 :S
private IplImage RemoveNoise( IplImage image, int minArea )
{
List<CvPoint[]> listOfPoints = new List<CvPoint[]>();
CvSeq<CvPoint> contoursRaw;
List<ContourData> contours = new List<ContourData>();
using( CvMemStorage storage = new CvMemStorage() )
{
//find contoures
//Cv.FindContours( image, storage, out contoursRaw );
Cv.FindContours( image, storage, out contoursRaw, CvContour.SizeOf, ContourRetrieval.Tree, ContourChain.ApproxSimple );
//contoursRaw = Cv.ApproxPoly( contoursRaw, CvContour.SizeOf, storage, ApproxPolyMethod.DP, 3, true );
while( contoursRaw != null )
{
CvSeq<CvPoint> result = contoursRaw;
double area = Cv.ContourArea( result );
//filter out small regions
if( area >= minArea )
{
List<CvPoint> points = new List<CvPoint>();
int i = 0;
while( result[ i ] != null )
{
points.Add( new CvPoint( result[ i ].Value.X, result[ i ].Value.Y ) );
i++;
}
listOfPoints.Add( points.ToArray() );
}
contoursRaw = contoursRaw.HNext;
}
}
// draw large regions
IplImage output = new IplImage( image.Size, image.Depth, 1 );
output.Set( CvColor.Black );
CvPoint[][] ArrayOfPoints = listOfPoints.ToArray();
output.FillPoly( ArrayOfPoints, CvColor.White );
return output;
}
最佳答案
试试这个。
IplImage input = new IplImage(@"C:\Users\20396600\Downloads\cont.jpg");
IplImage gray = new IplImage(input.Size, BitDepth.U8, 1);
IplImage invert = gray.Clone();
input.CvtColor(gray, ColorConversion.BgrToGray);
gray.Threshold(invert, 70, 255, ThresholdType.BinaryInv);
RemoveNoise(invert, 150);
private IplImage RemoveNoise(IplImage image, int minArea)
{
IplImage output = new IplImage(image.Size, BitDepth.U8, 3);//image.Depth, 1);
output.Set(CvColor.Black);
CvSeq<CvPoint> contoursRaw;
using (CvMemStorage storage = new CvMemStorage())
{
//find contours
Cv.FindContours(image, storage, out contoursRaw, CvContour.SizeOf, ContourRetrieval.Tree, ContourChain.ApproxSimple);
//Taken straight from one of the OpenCvSharp samples
using (CvContourScanner scanner = new CvContourScanner(image, storage, CvContour.SizeOf, ContourRetrieval.Tree, ContourChain.ApproxSimple))
{
foreach (CvSeq<CvPoint> c in scanner)
{
//Some contours are negative so make them all positive for easy comparison
double area = Math.Abs(c.ContourArea());
//Uncomment below to see the area of each contour
//Console.WriteLine(area.ToString());
if (area >= minArea)
{
List<CvPoint[]> points = new List<CvPoint[]>();
List<CvPoint> point = new List<CvPoint>();
foreach (CvPoint p in c.ToArray())
point.Add(p);
points.Add(point.ToArray());
//Use FillPoly instead of DrawContours as requested
output.FillPoly(points.ToArray(), CvColor.Red, LineType.AntiAlias);
//-1 means fill the polygon
//output.DrawContours(c, CvColor.White, CvColor.Green, 0, -1, LineType.AntiAlias);
//Uncomment two lines below to see contours being drawn gradually
//Cv.ShowImage("Window", output);
//Cv.WaitKey();
}
}
}
}
output.SaveImage("output.png");
return output;
}
关于c# - OpenCVSharp findContours 返回错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35418714/
我刚开始学习 Emgu 和 OpenCV。所以这可能是一个愚蠢的问题。当我查看 Emgu 文档(参见链接 http://www.emgu.com/wiki/files/3.1.0/document/h
我在以下代码查找轮廓的运行时遇到段错误。我提到了this在此表格上发帖,但对我帮助不大。我知道 findContours 有一些问题这是 findContours 的另一期.请检查这两个链接并帮助我解
我正在使用这样的函数; Mat large = imread(path+name); Mat rgb; if (large.rows > 2500 || large.cols > 1250) {
我正在尝试检测一个球并为其划定边界。显示错误 segmentation fault (core dumped) 错误就在这里, vector > contours; vector hierar
我想使用 haar cascade 来计算汽车数量。 #import libraries of python opencv import numpy as np import cv2 import g
我正在使用 Android OpenCV。我有一个方形标记图像。我必须找出实时提要中标记的四个角的位置及其索引的位置。我能够在帧大小为 640*480 的实时馈送中获得这四个点的位置。但是索引位置的问
我写了一段代码,在单 channel 空白图像中绘制圆、线和矩形。在那之后,我只是找出图像中的轮廓,并且我正确地得到了所有轮廓。但是在找到轮廓后,我的源图像变得扭曲了。为什么会这样?任何人都可以帮助我
我们正在使用 opencv for android 实现 OCR,一切都很顺利,直到使用 Imgproc.findcontours() 查找轮廓的部分它返回的轮廓与输入图像中的顺序不同IE :输入图像
这个问题在这里已经有了答案: What is the algorithm that opencv uses for finding contours? (2 个答案) 关闭 7 年前。 OpenCV
我有下面的图片,并尝试用这些线找到最大的 OpenCV 矩形 std::vector > contours; cv::findContours(result,contours,CV_RETR_LIST
我是 C++ 和 opencv 的新手。我写了一个简单的程序,您可以在下面找到它,但是当我运行它时,我总是会抛出异常 findContours(img, ctr, CV_RETR_LIST, CV_C
我尝试在二进制图像中找到轮廓,但是当尝试执行cvFindContours时,它给了我该错误消息 Traceback (most recent call last): File "convert.py"
我正在尝试实现一个在二进制图像中找到轮廓并过滤掉小轮廓的函数。 这是我的代码和示例图像。这是一个 super 简单的功能,可以去除小面积的 Blob 。但我不断得到“边缘轮廓”而不是区域轮廓。 :S
我遇到了一个奇怪的行为,虽然我可以解决它,但我想知道这是为什么。 当我使用 cv2.findContours 时,它会修改原始图像,即使我没有将它传递给函数。这是一个可以找到图片的最小示例here .
我想问如何在 blob(findcontours)上检测人类或行人?我尝试学习如何使用 findcontours() 来检测框架上的任何对象,如下所示: #include"stdafx.h" #inc
提供一些上下文: 我正在尝试获取这张图片中的盒子数量, 我上面的图像存储在ndarray blank_img中。 如果我运行以下命令: v = np.median(blank_img) sigma =
Cow browncow; vector Cows; Mat temp; threshold.copyTo(temp); vector > contours; vector hierarchy; f
我试过 findContours 有 2 张图片。实际上,它们是一体的。一个是彩色图像(jpg),另一个是由 MS Paint 从颜色创建的(导出为单色图像 - bmp): #include "cv.
我是opencv和Java的初学者。我想学习Imgproc.findContours()方法的用法和功能。我没有任何资料可以学习。谁能详细解释一下它的工作原理。或有人可以建议我作为学习它的合适资源。
当我们想根据某个阈值查找给定图像的轮廓时,我们使用cv2.findContours()函数,该函数除其他外返回轮廓列表(表示图片轮廓的数组的Pythonic列表)。 这是use of the func
我是一名优秀的程序员,十分优秀!