opencv中的洪水填充算法


  在圖像處理里,如果我們需要填充一個區域,使該區域為相同的顏色,則比較常用的是洪水填充法。洪水填充法可以用DFS也可以用BFS實現。

  opencv下有函數實現該功能:

  

CVAPI(void)  cvFloodFill( CvArr* image, CvPoint seed_point,
                          CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)),
                          CvScalar up_diff CV_DEFAULT(cvScalarAll(0)),
                          CvConnectedComp* comp CV_DEFAULT(NULL),
                          int flags CV_DEFAULT(4),
                          CvArr* mask CV_DEFAULT(NULL));
image:表示被填充的圖像
seed_point:以哪個點為基點進行填充
new_val:填充成什么顏色
lo_diff ,up_diff:當鄰近像素點在參考點(可以設置參考點為定點,也可以是動點)范圍,(參考點 - lo_diff,參考點 + up_diff)
comp:連通量的屬性(暫時還沒解釋)
flags: 分成三部分,0-7位可以設置4或8(4表示上下左右,8表示點周圍八個點),8-15位設置指定填充掩碼的值,16-23位可以CV_FLOODFILL_FIXED_RANGE或者CV_FLOODFILL_MASK_ONLY(可以同時使用),CV_FLOODFILL_FIXED_RANGE設置后表示當前點與種子像素點在一定范圍內時才填充,否則當前點與相鄰點比較, 如果設置CV_FLOODFILL_MASK_ONLY那么就在設置掩碼的值
mask:跟掩碼有關,這里暫時不介紹

測試代碼:
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int main(){
    IplImage *img= cvLoadImage("C:/CIR.jpg");//讀取圖片
    cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);

    cvShowImage("Example1",img);//在Example1顯示圖片
    //    cvCopy(img,temp);
    IplImage* temp=cvCreateImage( //創建一個size為image,三通道8位的彩色圖
        cvGetSize(img),
        IPL_DEPTH_8U,
        3
        );
    CvPoint ptemp;//種子像素點位置
    ptemp.x=100; 
    ptemp.y=100;
    CvScalar scalarTemp;
    scalarTemp.val[0]=0;//填充成黑色
    scalarTemp.val[1]=0;
    scalarTemp.val[2]=0;

    CvScalar scalarDis;
    scalarDis.val[0]=13;//范圍
    scalarDis.val[1]=13;
    scalarDis.val[2]=13;

    cvCopy(img,temp);
    cvFloodFill(
        temp,
        ptemp,
        scalarTemp,
        scalarDis,
        scalarDis
        );

    cvShowImage("Example2",temp);

    cvWaitKey(0);//暫停用於顯示圖片

    cvReleaseImage(&img);//釋放img所指向的內存空間並且
    cvDestroyWindow("Example1");
    cvDestroyWindow("Example2");
    return 0;
}
View Code

 效果圖:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM