Visual Studio C# 中的 Open CV v3.1 错误
Error with Open CV v3.1 in Visual Studio C#
我正在做一个需要使用 OpenCV 的学校项目。
我尝试使用 OpenCV 提供的函数 "findcontours"。
但是,当我调用该函数时,系统性地出现错误,程序结束。
没有给我任何建议或错误信息。
我把出错的那部分代码放在那里。
问我是否需要在我的代码中查看其他内容。
/// <summary>
/// Detect the contour of the image.
/// </summary>
/// <param name="imgCannyEdges_loc">Image made with Canny.</param>
/// <returns>VectorOfVectorOfPointF</returns>
public VectorOfVectorOfPointF detectContourInImage(Image<Gray, byte> imgCannyEdges_loc)
{
VectorOfVectorOfPointF vvpfListOfPoints = new VectorOfVectorOfPointF();
CvInvoke.FindContours(imgCannyEdges_loc, vvpfListOfPoints, null, RetrType.List, ChainApproxMethod.ChainApproxNone);
return vvpfListOfPoints;
}
在这里,我将我的代码部分用于创建和更改图像。我的函数中将使用同一张图片,我在上面给你的。
/// <summary>
/// Analysis with contour and with OpenCV.
/// </summary>
/// <param name="btmImage_loc">The bitmap of the image that the user wants to analys</param>
/// <param name="dblThreshold_loc">The threshold defined by the user.</param>
/// <param name="bReverse_loc">If the image needs to be reversed (black and white).</param>
/// <param name="bPreview_loc">If we are asking for a preview or not.</param>
/// <param name="iAnalysisPrecision_loc">The precision of the analysis.</param>
/// <returns>The image, resized, and with the different change.</returns>
public Image<Gray, Byte> thresholdingOpenCV(Bitmap btmImage_loc, double dblThreshold_loc,
bool bReverse_loc, bool bPreview_loc, int iAnalysisPrecision_loc)
{
Image<Bgr, Byte> imgResized_loc;
if (bPreview_loc == true)
{
imgResized_loc = new Image<Bgr, byte>(btmImage_loc).Resize(297, 210, Inter.Linear, true);
}
else
{
imgResized_loc = new Image<Bgr, byte>(btmImage_loc).Resize(297 * iAnalysisPrecision_loc,
210 * iAnalysisPrecision_loc, Inter.Linear, true);
}
Image<Gray, Byte> imgCannyEdges_loc =
(imgResized_loc.Convert<Gray, Byte>()).Canny(Math.Pow(dblThreshold_loc, 1.3), Math.Pow(dblThreshold_loc, 1.3));
imgCannyEdges_loc.SmoothGaussian(3);
if (bReverse_loc)
return imgCannyEdges_loc;
else
return imgCannyEdges_loc.Not();
}
在此先感谢您的帮助,如果有什么地方不够清楚,请不要忘记向我提问。
亚历山大·沃尔法特
我发现了问题。
VectorOfVectorOfPointF 是正确的。
findcontours,不要搜索 PointF,而是搜索 Point。
所以使用 VectorOfVectorOfPoint (不是 VectorOfVectorOfPointF)
我正在做一个需要使用 OpenCV 的学校项目。
我尝试使用 OpenCV 提供的函数 "findcontours"。 但是,当我调用该函数时,系统性地出现错误,程序结束。 没有给我任何建议或错误信息。
我把出错的那部分代码放在那里。 问我是否需要在我的代码中查看其他内容。
/// <summary>
/// Detect the contour of the image.
/// </summary>
/// <param name="imgCannyEdges_loc">Image made with Canny.</param>
/// <returns>VectorOfVectorOfPointF</returns>
public VectorOfVectorOfPointF detectContourInImage(Image<Gray, byte> imgCannyEdges_loc)
{
VectorOfVectorOfPointF vvpfListOfPoints = new VectorOfVectorOfPointF();
CvInvoke.FindContours(imgCannyEdges_loc, vvpfListOfPoints, null, RetrType.List, ChainApproxMethod.ChainApproxNone);
return vvpfListOfPoints;
}
在这里,我将我的代码部分用于创建和更改图像。我的函数中将使用同一张图片,我在上面给你的。
/// <summary>
/// Analysis with contour and with OpenCV.
/// </summary>
/// <param name="btmImage_loc">The bitmap of the image that the user wants to analys</param>
/// <param name="dblThreshold_loc">The threshold defined by the user.</param>
/// <param name="bReverse_loc">If the image needs to be reversed (black and white).</param>
/// <param name="bPreview_loc">If we are asking for a preview or not.</param>
/// <param name="iAnalysisPrecision_loc">The precision of the analysis.</param>
/// <returns>The image, resized, and with the different change.</returns>
public Image<Gray, Byte> thresholdingOpenCV(Bitmap btmImage_loc, double dblThreshold_loc,
bool bReverse_loc, bool bPreview_loc, int iAnalysisPrecision_loc)
{
Image<Bgr, Byte> imgResized_loc;
if (bPreview_loc == true)
{
imgResized_loc = new Image<Bgr, byte>(btmImage_loc).Resize(297, 210, Inter.Linear, true);
}
else
{
imgResized_loc = new Image<Bgr, byte>(btmImage_loc).Resize(297 * iAnalysisPrecision_loc,
210 * iAnalysisPrecision_loc, Inter.Linear, true);
}
Image<Gray, Byte> imgCannyEdges_loc =
(imgResized_loc.Convert<Gray, Byte>()).Canny(Math.Pow(dblThreshold_loc, 1.3), Math.Pow(dblThreshold_loc, 1.3));
imgCannyEdges_loc.SmoothGaussian(3);
if (bReverse_loc)
return imgCannyEdges_loc;
else
return imgCannyEdges_loc.Not();
}
在此先感谢您的帮助,如果有什么地方不够清楚,请不要忘记向我提问。
亚历山大·沃尔法特
我发现了问题。 VectorOfVectorOfPointF 是正确的。 findcontours,不要搜索 PointF,而是搜索 Point。 所以使用 VectorOfVectorOfPoint (不是 VectorOfVectorOfPointF)