• OpenCV (十)提取水平线与垂直线


    步骤:

    1. 读取图片
    2. 转换为灰度图片
    3. 将灰度图片转化为二值图片 adaptiveThreshold()
    4. 腐蚀
    5. 膨胀

    adapativeThreshold():

    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    using namespace cv;
    using namespace std;
    
    Mat src, dst, bilary_gray, output;
    
    int main(int argc, char** argv) {
    	src = imread("D:/OpenCVprj/image/test6.jpg");
    	if (!src.data) {
    		cout << "Could not load image......
    " << endl; 
    			return -1;
    	}
    	imshow("src", src);
    
    	cvtColor(src, dst, CV_BGR2GRAY);
    	imshow("dst", dst);
    	adaptiveThreshold(~dst, bilary_gray, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
    	//double maxValue,二值图像最大值
    	//int adaptiveMethod,自适应方法,只能其中之一 - ADAPTIVE_THRESH_MEAN_C , ADAPTIVE_THRESH_GAUSSIAN_C 
    	//int thresholdType,阈值类型
    	//int blockSize,块大小
    	//double C, 常量C 可以是正数,0,负数
    	imshow("bilary_gray", bilary_gray);
    	Mat kernel1 = getStructuringElement(MORPH_RECT, Size(dst.cols/16, 1), Point(-1, -1));
    	//Mat kernel2 = getStructuringElement(MORPH_RECT, Size(1, dst.rows/16), Point(-1, -1));
    	erode(bilary_gray, dst, kernel1);
    	dilate(dst, output, kernel1);
    	bitwise_not(output, output);
    	imshow("output", output);
    
    	waitKey(0);
    	return 0;
    }
    

      

    应用补充:

    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    using namespace cv;
    using namespace std;
    
    Mat src, dst, bilary_gray, output;
    
    int main(int argc, char** argv) {
    	src = imread("D:/OpenCVprj/image/test6.jpg");
    	if (!src.data) {
    		cout << "Could not load image......
    " << endl; 
    			return -1;
    	}
    	imshow("src", src);
    
    	cvtColor(src, dst, CV_BGR2GRAY);
    	imshow("dst", dst);
    	adaptiveThreshold(~dst, bilary_gray, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
    	//double maxValue,二值图像最大值
    	//int adaptiveMethod,自适应方法,只能其中之一 - ADAPTIVE_THRESH_MEAN_C , ADAPTIVE_THRESH_GAUSSIAN_C 
    	//int thresholdType,阈值类型
    	//int blockSize,块大小
    	//double C, 常量C 可以是正数,0,负数
    	imshow("bilary_gray", bilary_gray);
    	//Mat kernel1 = getStructuringElement(MORPH_RECT, Size(dst.cols/16, 1), Point(-1, -1));
    	//Mat kernel2 = getStructuringElement(MORPH_RECT, Size(1, dst.rows/16), Point(-1, -1));
    	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    	erode(bilary_gray, dst, kernel);
    	dilate(dst, output, kernel);
    	bitwise_not(output, output);
    	//blur(output, output, Size(3, 3), Point(-1, -1));
    	imshow("output", output);
    	
    	waitKey(0);
    	return 0;
    }
    

      

  • 相关阅读:
    Servlet编程实例1
    Servlet
    JDBC之代码优化
    JDBC数据库编程
    数据库常识
    数据库基本操作
    STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料
    QT入门学习笔记2:QT例程
    爬虫制作入门学习笔记2:[转]python爬虫实例项目大全
    中移物联网onenet入门学习笔记2:中移物联的通信格式
  • 原文地址:https://www.cnblogs.com/haiboxiaobai/p/11235972.html
Copyright © 2020-2023  润新知