내 배경은 C ++이고 OpenCV를 사용하는 내 앱 중 하나를 EmguCV를 사용하는 C # 앱으로 번역하려고했습니다. EmguCV 문서와 Wiki는 물론 StackOverflow Q / A를 가능한 한 깊이있게 읽었으며 일부 기본 문제를 해결하는 데 운이 없었습니다. 이 시점에서 저는 EmguCV에 대해 생각하는 방식이 근본적으로 결함이 있는지 궁금합니다.
나는 EmguCV이하자의 말에 대한 C ++ 라이브러리에 대한 인터페이스를 제공하는 경우가 있다는 인상이었다 FloodFill
사용 CvInvoke.FloodFill(IInputOutputArray, IInputOutputArray, ...)
이 복귀한다는 점에 자체 메모리 관리를 돌봐 아래, IInputOutputArray
S (내 경우 A의가 Mat
) 모든 알아서입니다. 그러나 실제로 CvInvoke.FloodFill
는 dll 내에서 예외로 인해 호출이 실패합니다.
이것이 내가 가진 것입니다.
int i = ...
int j = ...
int intensity = ...
int height = img.Rows;
int width = img.Cols;
Mat outputMask = new Mat(height + 2, width + 2, DepthType.Cv8U, 1);
Rectangle dummy = new Rectangle();
CvInvoke.FloodFill(img, outputMask, new Point(i, j), new MCvScalar(255), out dummy, new MCvScalar(intensity), new MCvScalar(intensity), Connectivity.EightConnected, FloodFillType.MaskOnly);
그러나 도움이되지 않는 예외 설명으로 호출이 실패합니다. 내가 사용하고 GCHandle
할당하고 다른 방법에 대한 고정하면 원시 데이터 아래에 액세스 할 수 있지만, 저는 믿습니다 CvInvoke.FloodFill
일부 지역에서 호출 할 때 안전합니다 Mat
들.
내 질문은 내가 C ++ 및 OpenCV에 대한 내 배경을 고려할 때 EmguCV가 사용되어야하는 방식을 완전히 벗어 났는지 여부입니다. 그렇다면 그러한 함수를 호출하는 올바른 방법은 무엇입니까?
이것은 EmguCV 3.1 FloodFill에서 동일한 문제가 발생할 수있는 모든 사람을위한 것입니다. 꽤 오랜 시간 동안 내 코드를 디버깅 한 후 EmguCV 3.1 구현 CvInvoke.FloodFill
이 버그가 있다고 확신합니다 . FloodFillType.MaskOnly
플래그를 사용하여 해당 메서드에서 마스크를 가져올 수있는 방법이 없습니다 .
대신에 나는 사이의 값을 가지고 내 원래 이미지를 편집 결국 0
하고 254
, 다음의 채우기 값을 사용하여 일반 플러드 필을했다 255
. 그런 다음 원본 이미지에서 Image.InRange()
모든 255
(채워진) 픽셀 을 분리 하는 방법을 사용했습니다 . EmguCV 팀에 버그를보고하고 어떤 일이 발생하는지 확인하겠습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다