免责声明:很难给出一个很好的答案,因为您提供的信息很少。如果您在二值化之前和之后发布图像,那会容易得多。但是,我将尝试给出一些提示。
如果孔很大,则可能是阈值错误,请尝试增大或减小阈值并检查结果。你可以试试
cv::threshold(gray_frame, gray_frame, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
这将自动计算阈值。如果找不到合适的阈值,请尝试一些自适应阈值算法,opencv具有adaptiveThreshold()函数,但效果不佳。
如果孔和噪声很小(每个像素很少),则可以尝试以下一些方法:
使用开孔(侵蚀,下一次膨胀)去除白噪声,然后关闭(膨胀,下一次腐蚀)以产生小的黑噪声。但是请记住,在消除白噪声的同时,开口也会增强黑噪声,反之亦然。
阈值化之后,中值模糊。它可以消除黑色和白色的细微噪音,同时保留色彩(图像将变成二进制),并在可能的微小误差下保留形状。在二值化之前应用中值模糊也可能有助于减少小噪声。
0
我已经使用openCV将视频读入Visual Studio,并将其转换为灰度,然后使用函数CV_THRESH_BINARY将其转换为二进制图像。但是,框架中有孔和噪音。去除噪音或孔洞的简单方法是什么?我已经阅读了openCV中的Erode和Dilate函数,但是我不太清楚如何使用它们。到目前为止,这是我的代码。如果有人可以告诉我如何将噪声消除功能纳入我的代码中,将不胜感激。