質問

OpenCVを使用してビデオをVisual Studioに読んで、Grayscaleに変換し、関数cv_thresh_binaryを使用してバイナリ画像に変換しました。ただし、フレームには穴とノイズがあります。ノイズや穴を取り除く簡単な方法は何ですか? OpenCVの侵食と拡張機能を読み上げましたが、それらの使用方法についてはあまり明確ではありません。これはこれまでの私のコードです。誰かが私のコードにノイズの除去を組み込む方法を教えてくれるなら、それは大歓迎です。

#include "cv.h"
#include "highgui.h"

int main( int argc, char* argv ) {

CvCapture *capture = NULL;
capture = cvCaptureFromAVI("C:\\walking\\lady walking.avi");
if(!capture){
    return -1;
}

IplImage* color_frame = NULL;
IplImage* gray_frame = NULL ;
int thresh_frame = 70;

int frameCount=0;//Counts every 5 frames
cvNamedWindow( "Binary video", CV_WINDOW_AUTOSIZE );

while(1) {
    color_frame = cvQueryFrame( capture );//Grabs the frame from a file
    if( !color_frame ) break;
    gray_frame = cvCreateImage(cvSize(color_frame->width, color_frame->height),      color_frame->depth, 1);
    if( !color_frame ) break;// If the frame does not exist, quit the loop

    frameCount++;
    if(frameCount==5)
    {
        cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY);
        cvThreshold(gray_frame, gray_frame, thresh_frame, 255, CV_THRESH_BINARY);
        cvShowImage("Binary video", gray_frame);
        frameCount=0;
    }
    char c = cvWaitKey(33);
    if( c == 27 ) break;
}

cvReleaseImage(&color_frame);
cvReleaseImage(&gray_frame);
cvReleaseCapture( &capture );
cvDestroyWindow( "Grayscale video" );

return 0;
}
役に立ちましたか?

解決

免責事項:あなたがほとんど情報を提供しなかったので、良い答えを与えるのは難しいです。二等分化の前後に画像を投稿した場合、はるかに簡単になります。しかし、私はいくつかのヒントを与えようとします。

穴がかなり大きい場合は、おそらくしきい値が間違っている可能性があります。それを増やしたり減らしたりして結果を確認してください。あなたが試すことができます

cv::threshold(gray_frame, gray_frame, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

これにより、しきい値値が自動的に計算されます。優れたしきい値を見つけることができない場合は、適応型のしきい値を試してみてください。OpenCVにはadativeThreshold()関数がありますが、それほど良くありません。

穴とノイズがかなり小さい場合(それぞれ数ピクセル数)、次の一部を試すことができます。

  • 開口部(侵食、次の拡張)を使用して、小さな黒いノイズにホワイトノイズと閉鎖(拡張、次の侵食)を除去します。しかし、ホワイトノイズを除去しながら開口部も黒いノイズを強化し、その逆も同様であることを忘れないでください。

  • しきい値を行った後のぼかし。色を保持しながら、黒と白の両方で小さなノイズを除去する可能性があります(画像はバイナリになります)、そして、所有可能な小さなエラーで形状を除く。二等分の前に中央値のぼかしを適用すると、小さな騒音の減少にも役立ちます。

他のヒント

あなたはaを使用してみるかもしれません スムーズ で機能します CV_MEDIAN しきい値を行う前に。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top