zoukankan      html  css  js  c++  java
  • opencvfloodfill漫水填充

    函数作用:

      用给定的颜色填充一个连通区域 

    实例:

    3.jpg

      

    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    int main(int argc, char** argv) {
    
        
        cv::Mat src = cv::imread("D:/bb/tu/3.jpg");
        cv::Mat src1 = src.clone();
        
        imshow("原始图", src);
        cv::Rect ccomp;
        floodFill(src, cv::Point(50, 100), cv::Scalar(255, 0, 0), &ccomp, cv::Scalar(10, 10, 10), cv::Scalar(10, 10, 10));//漫水填充--不带掩膜版本
        /*
        第一个参数:InputOutputArray类型的image, 输入/输出1通道或3通道,8位或浮点图像,具体参数由之后的参数具体指明
        第二个参数:Point类型,漫水填充算法的起始点
        第三个参数:Scalar类型,像素点被染色的值,即在重绘区域像素的新值
        第四个参数:Rect*类型-可选输出参数,有默认值0,一个可选的参数,用于设置floodFill函数将要重绘区域的最小边界矩形区域
        第五个参数:当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大下行差异值,有默认值Scalar( )
                    【与参数2点 像素颜色的差异下行值】
        第六个参数:当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大上行差异值,有默认值Scalar( )
                    【与参数2点 像素颜色的差异上行值】
        第七个参数:flags操作标志符
                (1)低八位(第0~7位),用于控制算法的连通性,可取4(默认值)或者8。如果设为4,表示填充算法只考虑当前像素水平
                方向和垂直方向的相邻点。如果设为8,除上述相邻点外,还会包含对角线方向的相邻点。
                (2)高八位部分(16~23位),可以为0或者如下两种选项标识符的组合
                FLOODFILL_FIXED_RANGE - 如果设置为这个标识符的话,就会考虑当前像素与种子像素之间的差,否则就考虑当前像素与其相
                邻像素的差。也就是说,这个范围是浮动的。
                FLOODFILL_MASK_ONLY - 如果设置为这个标识符的话,函数不会去填充改变原始图像 (也就是忽略第三个参数newVal), 而是
                只使用flags标志中bit8-15的值去填充掩模图像(mask)。这个标识符只对第二个版本的floodFill有用,因第一个版本里面
                压根就没有mask参数。
                (3)中间八位部分,上面关于高八位FLOODFILL_MASK_ONLY标识符中已经说的很明显,需要输入符合要求的掩码。
                Floodfill的flags参数的中间八位的值就是用于指定填充掩码图像的值的。但如果flags中间八位的值为0,则掩码会用1来填充
        
        */
    
        imshow("不带掩膜", src);
    
        cv::Mat mask(src.rows + 2, src.cols + 2, CV_8UC1, cv::Scalar(0)); //掩膜
        for (int row = 0; row < 50;row++) {
            for (int col = 0; col < 100;col++) {
                mask.at<uchar>(row, col) = 100;
    
            }
        }
    
        floodFill(src1,mask, cv::Point(50, 100), cv::Scalar(255, 0, 0), &ccomp, cv::Scalar(10, 10, 10), cv::Scalar(10, 10, 10));//漫水填充--带掩膜版本
        /*第二个参数,mask表示操作掩膜,为单通道8位,长宽都比输入图像大两个像素点的图像。
                漫水填充不会填充掩膜mask的非零像素区域,mask中与输入图像(x,y)像素点相对应的点的坐标为(x+1,y+1)
        */
    
        imshow("带掩膜", src1);
    
        cv::waitKey(0);
        return 0;
    }

  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/liming19680104/p/15773021.html
Copyright © 2011-2022 走看看