opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

本章内容:

        1.腐蚀
        2.膨胀
        3.开运算
        4.闭运算
        5.顶冒
        6.黑冒

 

1.腐蚀

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

输出结果

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

2.膨胀

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

输出结果

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

3.开运算

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

输出结果

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

4.闭运算

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

输出结果

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

5. 顶冒运算

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

输出结果

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

6.黑冒运算

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

输出结果

opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒

 

源代码


#include <ostream>
#include <opencv.hpp>

int main(int argc, char *argv[])
{
    /*
     本章内容:
        1.腐蚀
        2.膨胀
        3.开运算
        4.闭运算
        5.顶冒
        6.黑冒

    */
    cv::String fileName = "/home/wang/dev/Image/cdut.jpeg";
    cv::Mat src = cv::imread(fileName);
    if(src.data == NULL){
        printf("图像读入失败\n");
        return -1;
    }
    /*1.腐蚀
        api接口:CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,
                         Point anchor = Point(-1,-1), int iterations = 1,
                         int borderType = BORDER_CONSTANT,
                         const Scalar& borderValue = morphologyDefaultBorderValue() );
        参数分析:
        @param kernel structuring element used for erosion; // 核大小
        @param iterations number of times erosion is applied.//迭代次数
    */
    cv::Mat dstErode;
    cv::Mat kernelErode;
    /* CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
        参数:
        shape:
            MORPH_RECT    = 0,  //矩形核
            MORPH_CROSS   = 1,  // 十字核
            MORPH_ELLIPSE = 2   // 椭圆核
     */
    kernelErode = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
    cv::erode(src, dstErode,kernelErode,cv::Point(-1,-1),4);
    cv::imshow("src", src);
    cv::imshow("src Erode", dstErode);
    /*2.膨胀
        api接口:CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,
                          Point anchor = Point(-1,-1), int iterations = 1,
                          int borderType = BORDER_CONSTANT,
                          const Scalar& borderValue = morphologyDefaultBorderValue() );

    */
    cv::Mat dstDilate;
    cv::Mat kernelDilate = cv::getStructuringElement(cv::MORPH_ELLIPSE,cv::Size(3,3));
    cv::dilate(src,dstDilate,kernelDilate,cv::Point(-1,-1),2);
    cv::imshow("src Dilate", dstDilate);
    /* 3.开运算
        api接口: CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,
                                int op, InputArray kernel,
                                Point anchor = Point(-1,-1), int iterations = 1,
                                int borderType = BORDER_CONSTANT,
                                const Scalar& borderValue = morphologyDefaultBorderValue() );
        参数分析:
            @param op Type of a morphological operation, see #MorphTypes // 运算符操作
        enum cv::MorphTypes:
            MORPH_ERODE    = 0,
            MORPH_DILATE   = 1,
            MORPH_OPEN     = 2,
            MORPH_CLOSE    = 3,
            MORPH_GRADIENT = 4,
            MORPH_TOPHAT   = 5,
            MORPH_BLACKHAT = 6,
            MORPH_HITMISS  = 7
    */
    cv::Mat dstOpen;
    cv::Mat kernelOpen = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
    cv::morphologyEx(src, dstOpen, cv::MORPH_OPEN, kernelOpen,cv::Size(-1,-1),4);
    cv::imshow("src open", dstOpen);
    /* 4.闭运算
        api接口:
    */
    cv::Mat dstClose;
    cv::Mat kernelClose = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
    cv::morphologyEx(src,dstClose,cv::MORPH_CLOSE,kernelClose,cv::Point(-1,-1),4);
    cv::imshow("src close", dstClose);
    /*5.顶冒运算
     * 原图像 - 开运算
    */
    cv::Mat dstTop;
    cv::Mat dstTop1;
    cv::Mat kernelTop = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
    cv::morphologyEx(src,dstTop,cv::MORPH_TOPHAT,kernelTop,cv::Point(-1,-1), 4);
    cv::subtract(src,dstOpen,dstTop1);
    cv::imshow("src tophat", dstTop);
    cv::imshow("src - dialte", dstTop1);
    /*6.黑猫运算
        闭运算 - 原图像
    */
    cv::Mat dstBlack;
    cv::Mat dstBlack1;
    cv::Mat kernelBlack = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
    cv::morphologyEx(src,dstBlack,cv::MORPH_BLACKHAT,kernelBlack,cv::Point(-1,-1), 4);
    cv::subtract(dstClose,src,dstBlack1);
    cv::imshow("src tophat", dstBlack);
    cv::imshow("src - dialte", dstBlack1);

    cv::waitKey(0);
    return 1;
}