• (16)提取水平和垂直线


    提取水平和垂直线,就是应用之前学的开 和关的操作来实现。

    具体知识点,看这个博客:https://blog.csdn.net/qq_25343557/article/details/78691828

    ================================================

    下面是实现提取竖直线

    =============================================

     1 #include<iostream>
     2 #include<opencv.hpp>
     3 
     4 using namespace std;
     5 using namespace cv;
     6 void GetLine();
     7 int main()
     8 {
     9     GetLine();
    10 
    11 
    12     waitKey(0);
    13     return 1;
    14 }
    15 void GetLine() {
    16     Mat src, grayImg, binImg, dest;
    17     //①、读取图片
    18     src = imread("C:\Users\32829\Desktop\qq.png");
    19     if (!src.data) {
    20         cout << "图片打开失败!" << endl;
    21         return;
    22     }
    23     namedWindow("原图像", CV_WINDOW_AUTOSIZE);
    24     imshow("原图像", src);
    25     //②、转为灰度图
    26     cvtColor(src, grayImg, CV_RGB2GRAY);
    27     namedWindow("灰度图", CV_WINDOW_AUTOSIZE);
    28     imshow("灰度图", grayImg);
    29     //③、转为二值图像
    30     adaptiveThreshold(~grayImg, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
    31     namedWindow("二值图像", CV_WINDOW_AUTOSIZE);
    32     imshow("二值图像", binImg);
    33     //④、定义结构元素
    34     Mat kernel = getStructuringElement(MORPH_RECT, Size(1, 20));
    35     //⑤、开操作
    36     morphologyEx(binImg, dest, MORPH_OPEN, kernel);
    37     namedWindow("最终结果", CV_WINDOW_AUTOSIZE);
    38     imshow("最终结果", ~dest);
    39 
    40     cvWaitKey();
    41 }

    最后结果展示:

    =========================================================

    =========================================

    要是获得横线,就直接修改Size里面的值就行,比如变为(20,1),我理解的kernel就是每次从上到下,从左到右移动的小的元素值,那么这个Size就是限定你移动的小的元素值的形状和大小。

    ========================================

     1 #include<iostream>
     2 #include<opencv.hpp>
     3 
     4 using namespace std;
     5 using namespace cv;
     6 void GetLine();
     7 int main()
     8 {
     9     GetLine();
    10 
    11 
    12     waitKey(0);
    13     return 1;
    14 }
    15 void GetLine() {
    16     Mat src, grayImg, binImg, dest;
    17     //①、读取图片
    18     src = imread("C:\Users\32829\Desktop\qq.png");
    19     if (!src.data) {
    20         cout << "图片打开失败!" << endl;
    21         return;
    22     }
    23     namedWindow("原图像", CV_WINDOW_AUTOSIZE);
    24     imshow("原图像", src);
    25     //②、转为灰度图
    26     cvtColor(src, grayImg, CV_RGB2GRAY);
    27     namedWindow("灰度图", CV_WINDOW_AUTOSIZE);
    28     imshow("灰度图", grayImg);
    29     //③、转为二值图像
    30     adaptiveThreshold(~grayImg, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
    31     namedWindow("二值图像", CV_WINDOW_AUTOSIZE);
    32     imshow("二值图像", binImg);
    33     //④、定义结构元素
    34     Mat kernel = getStructuringElement(MORPH_RECT, Size(20, 1));
    35     //⑤、开操作
    36     morphologyEx(binImg, dest, MORPH_OPEN, kernel);
    37     namedWindow("最终结果", CV_WINDOW_AUTOSIZE);
    38     imshow("最终结果", ~dest);
    39 
    40     cvWaitKey();
    41 }

    =================================================================

    下面是结果展示:

    ===========================================================

  • 相关阅读:
    Linux 用C语言实现简单的shell(1)
    线性回归 Linear regression(4) 局部加权回归
    线性回归 Linear regression(3) 线性回归的概率解释
    线性回归 Linear regression(2)线性回归梯度下降中学习率的讨论
    线性回归 Linear regression(1)线性回归的基本算法与求解
    超多JavaASP.NETPHPoracleandroidiphoneVC++项目实战视频教程免费下载
    struct 和 typedef struct
    soj1200- 简单的等式 (素数打表,找因子)
    soj1209- 最短的距离(精度问题)
    快排
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/10194253.html
走看看 - 开发者的网上家园