zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    分库分表(1) --- 理论
    Elasticsearch(10) --- 内置分词器、中文分词器
    Elasticsearch(9) --- 聚合查询(Bucket聚合)
    Elasticsearch(8) --- 聚合查询(Metric聚合)
    Elasticsearch(7) --- 复合查询
    Elasticsearch(6) --- Query查询和Filter查询
    Elasticsearch(5) --- 基本命令(集群相关命令、索引CRUD命令、文档CRUD命令)
    第二周 Word版面设计
    第六周 Word目录和索引
    第五周 Word注释与交叉引用
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/15385405.html
Copyright © 2011-2022 走看看