• OpenCV实现开操作、闭操作、形态学梯度、顶帽、黑帽


    一、概述

      案例:利用opencv实现开操作、闭操作、形态学梯度、顶帽、黑帽

    二、示例图

      1.开操作

      

      2.闭操作

      3.形态学梯度

      4.顶帽

      5.黑帽

    三、示例代码

    //开操作:先腐蚀后膨胀,可以去掉小的对象
    //闭操作:先膨胀、后腐蚀,可以填充小的洞
    //形态学梯度:又称为基本梯度,基本原理是:膨胀减去腐蚀
    //顶帽:原图像与开操作之间的差值图像
    //黑帽:原图像与闭操作图像的差值图像
    //
    
    
    
    
    
    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    void getGray();
    void getThreshold();
    
    Mat src,dst,gray,thresholdMat;
    /**获取原生图像*/
    int getSrc(){
    	src = imread("girl.jpg");
    	if(!src.data){
    		cout << "can't load image..."<<endl;
    		return -1;
    	}
    	imshow("src",src);
    	// getGray();
    	// getThreshold();
    	return 0;
    }
    
    /**对图像进行灰度处理*/
    void getGray(){
    	//转换色彩空间--->将彩色图转换为灰度图
    	cvtColor(src,gray,COLOR_BGR2GRAY);
    	imshow("gray",gray);
    }
    
    /**
     * 对图像进行二值分割
     * */
    void getThreshold(){
    	threshold(gray,thresholdMat,0,255,THRESH_OTSU);
    	imshow("thresholdMat",thresholdMat);
    }
    
    /**
     * 开操作
     * */
    void openOption(){
    	getSrc();
    	Mat kernel = getStructuringElement(MORPH_RECT,Size(7,7),Point(-1,-1));
    	morphologyEx(src,dst,MORPH_OPEN ,kernel);
    	imshow("dst",dst);
    
    }
    
    /**
     * 闭操作
     * */
    void closeOption(){
    	getSrc();
    	Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5),Point(-1,-1));
    	morphologyEx(src,dst,MORPH_CLOSE,kernel);
    	imshow("dst",dst);
    }
    
    /**
     * 
     * 形态学梯度:突出高亮区域的外围、为轮廓查找提供思路
     * */
    void gradOption(){
    	getSrc();
    	Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5),Point(-1,-1));
    	morphologyEx(src,dst,MORPH_GRADIENT,kernel);
    	imshow("dst",dst);
    }
    
    /**
     * 顶帽操作:用于背景提取、顶帽运算往往用来分离比临近点亮一些的斑点,当一副图像具有大幅背景的时候,而微小物品比较有规律的
    	情况下可以用顶帽运算进行背景提取
     * */
    void topOption(){
    	getSrc();
    	Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5),Point(-1,-1));
    	morphologyEx(src,dst,MORPH_TOPHAT,kernel);
    	imshow("dst",dst);
    }
    /**
     * 黑帽操作
     * */
    void blackOption(){
    	getSrc();
    	Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5),Point(-1,-1));
    	morphologyEx(src,dst,MORPH_BLACKHAT,kernel);
    	imshow("dst",dst);
    }
    
    int main(int argc, char const *argv[])
    {
    	
    	// openOption();
    	// closeOption();
    	// gradOption();
    	// topOption();
    	blackOption();
    
    	waitKey(0);
    	return 0;
    }
    

      

  • 相关阅读:
    Kuangbin带你飞 专题二十 斜率DP
    牛客每日一题3月
    2020 SWJTU-ICPC Training Round #2(18年福建省赛)部分题解
    codeforces每日一题31-40
    SWJTU校队训练&Codeforces&Atcoder&&牛客三月补题
    Kuangbin带你飞-专题九连通图
    POJ 3667 Hotel(线段树区间合并)
    AtCoder Beginner Contest 157(题解)
    2.22专项测试复盘
    2.21专项测试复盘
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/15385405.html
Copyright © 2020-2023  润新知