图像分割的方法很多,我们首先看看阈值分割法。使用阈值分割法的重点是,选取一个合适的阈值!
本示例从观察灰度图像的直方图,获得阈值。
在示例21里面,我们计算和绘制了飞机降落那张灰度图的直方图。从这个直方图可以直观的看到,存在一个大的峰值,同时拥有大量深色的像素。这两组像素基本对应的是图像的背景和前景。
通过在两组像素之间的过渡处进行阈值化,创建二值图像。在这儿,我们选择的阈值是峰值上升前的过渡值(灰度值120)。
一、c++示例代码
//包含头文件
#include <opencv2/opencv.hpp>
//命名空间
using namespace cv;
using namespace std;
//全局函数声明部分
//主函数
int main()
{
//【1】载入图像
Mat image = imread("G:\\opencvtest\\testImage\\airplane.jpg");
//【2】检查是否载入成功
if (image.empty())
{
printf("读取图片错误,请确认目录下是否有imread函数指定图片存在! \n ");
return 0;
}
//【3】图像灰度化
Mat grayImage;
cvtColor(image, grayImage, COLOR_BGR2GRAY);
//【4】图像分割:阈值分割法
Mat binImage;
threshold(grayImage, binImage, 120, 255, THRESH_BINARY);
//【5】形态学滤波
Mat erodedImage, dilatedImage;
Mat element = getStructuringElement(MORPH_ELLIPSE, Size(5, 5));
morphol