• 图像的二值化


    书上已经讲得很细了,直接贴出来了

    直接上代码(来自https://blog.csdn.net/MoreWindows)

     1 //图像的二值化
     2 //By MoreWindows (http://blog.csdn.net/MoreWindows)
     3 #include<iostream>
     4 #include <opencv2/core/core.hpp>  
     5 #include <opencv2/opencv.hpp>
     6 #include <opencv2/highgui/highgui.hpp> 
     7 #include <opencv2/highgui/highgui_c.h>
     8 #include "opencv2/imgproc/imgproc_c.h"
     9 #include <opencv2/imgproc/imgproc.hpp>  
    10 using namespace cv;
    11 using namespace std;
    12 #pragma comment(linker, "/subsystem:"windows" /entry:"mainCRTStartup"")
    13 
    14 IplImage *g_pGrayImage = NULL;
    15 IplImage *g_pBinaryImage = NULL;
    16 const char *pstrWindowsBinaryTitle = "二值图(http://blog.csdn.net/MoreWindows)";
    17 
    18 void on_trackbar(int pos)
    19 {
    20     // 转为二值图
    21     cvThreshold(g_pGrayImage, g_pBinaryImage, pos, 255, CV_THRESH_BINARY);
    22     // 显示二值图
    23     cvShowImage(pstrWindowsBinaryTitle, g_pBinaryImage);
    24 }
    25 
    26 int main(int argc, char** argv)
    27 {
    28     const char *pstrWindowsSrcTitle = "原图(http://blog.csdn.net/MoreWindows)";
    29     const char *pstrWindowsToolBarName = "二值图阈值";
    30 
    31     // 从文件中加载原图
    32     IplImage *pSrcImage = cvLoadImage("D:/picture/ZiXia.jpg", CV_LOAD_IMAGE_UNCHANGED);
    33 
    34     // 转为灰度图
    35     g_pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);
    36     cvCvtColor(pSrcImage, g_pGrayImage, CV_BGR2GRAY);
    37 
    38     // 创建二值图
    39     g_pBinaryImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, 1);
    40 
    41     // 显示原图
    42     cvNamedWindow(pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE);
    43     cvShowImage(pstrWindowsSrcTitle, pSrcImage);
    44     // 创建二值图窗口
    45     cvNamedWindow(pstrWindowsBinaryTitle, CV_WINDOW_AUTOSIZE);
    46 
    47     // 滑动条    
    48     int nThreshold = 0;
    49     cvCreateTrackbar(pstrWindowsToolBarName, pstrWindowsBinaryTitle, &nThreshold, 254, on_trackbar);
    50 
    51     on_trackbar(1);
    52 
    53     cvWaitKey(0);
    54 
    55     cvDestroyWindow(pstrWindowsSrcTitle);
    56     cvDestroyWindow(pstrWindowsBinaryTitle);
    57     cvReleaseImage(&pSrcImage);
    58     cvReleaseImage(&g_pGrayImage);
    59     cvReleaseImage(&g_pBinaryImage);
    60     return 0;
    61 }

    (注;opencv4.0以上可能无法运行,部分函数可能找不到,反正在我的vs上cvloadimage一直爆红)

     这是另一个实现二值化的代码,如下,可以成功运行

     1 //对一幅图像进行二值化
     2 #include<iostream>
     3 #include <opencv2/core/core.hpp>  
     4 #include <opencv2/opencv.hpp>
     5 #include <opencv2/highgui/highgui.hpp> 
     6 #include <opencv2/highgui/highgui_c.h>
     7 #include "opencv2/imgproc/imgproc_c.h"
     8 #include <opencv2/imgproc/imgproc.hpp>  
     9 using namespace cv;
    10 using namespace std;
    11 
    12 
    13 int main()
    14 {
    15     Mat imag, result;
    16     imag = imread("D:/picture/ZiXia.jpg", 0);    //将读入的彩色图像直接以灰度图像读入
    17     namedWindow("原图", 1);
    18     imshow("原图", imag);
    19     result = imag.clone();
    20     //进行二值化处理,选择30,200.0为阈值
    21     threshold(imag, result, 30, 200.0, -1);
    22     namedWindow("二值化图像");
    23     imshow("二值化图像", result);
    24     waitKey();
    25     return 0;
    26 }

    相比于第二个代码,第一个代码运行时可以动态调整阈值,且阈值越大黑色区域更多,运行效果更好体现了阈值的含义,不过这两个代码的核心函数都是threshold();

    对于该函数

    函数原型

    参数说明
    src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。(两者由区别)
    dst:输出图像
    thresh:阈值
    maxval:dst图像中最大值
    type:阈值类型,可以具体类型如下:


    编号

    阈值类型枚举

    注意


    1

    THRESH_BINARY


    2

    THRESH_BINARY_INV


    3

    THRESH_TRUNC


    4

    THRESH_TOZERO


    5

    THRESH_TOZERO_INV


    6

    THRESH_MASK

    不支持


    7

    THRESH_OTSU

    不支持32位


    8

    THRESH_TRIANGLE

    不支持32位
    第三个参数设置阈值,越大则黑色的区域越大,否则反之,第四个参数越大白色的区域越白。

  • 相关阅读:
    恭喜发财
    狗腿子的一天
    向系统分析员爬进
    解决SqlTransaction用尽的问题
    Localhost与数据库连接
    《成都,今夜请将我遗忘》读后感
    如何快速掌握一门技术
    怎样做一个iOS App的启动分层引导动画?
    怎么去掉Xcode工程中的某种类型的警告
    iOS 8 AutoLayout与Size Class自悟
  • 原文地址:https://www.cnblogs.com/henuliulei/p/10616849.html
Copyright © 2020-2023  润新知