OpenCV Tutorial: 自適應閾值(threshold、CV_THRESH_OTSU)
2016-10-31 10:09
603 查看
自適應閾值(threshold、CV_THRESH_OTSU)
所謂的二值化是將影像進行區分,分成我們感興趣的部分(前景),以及不感興趣的部分(背景),通常將某個強度當作分割的標準,這個強度稱作閾值(threshold),通常以強度超過閾值的像素當作前景,反之則為背景。閾值的算法主要分兩類:
固定閾值:程式或使用者直接給定一個灰階值當閾值,再用這個閾值進行二值化。
自適應閾值:輸入影像,程式依這影像計算出較合適的閾值,再用這個閾值進行二值化。
這邊介紹一種自適應閾值的算法Otsu,以及在OpenCV如何用這個方式找閾值後進行二值化。
Otsu流程:
先計算影像的直方圖
把直方圖強度大於閾值的像素分成一組,把小於閾值的像素分成另一組。
分別計算這兩組的組內變異數,並把兩個組內變異數相加。
將0~255依序當作閾值來計算組內變異數和,總和值最小的就是結果閾值。
OpenCV自適應閾值二值化
一樣是用threshold()函式,使用方式也一樣,只是最後一個參數增加CV_THRESH_OTSU,目前otsu只能使用在8位元圖。double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
src:輸入圖,只能輸入單通道,8位元或32位元浮點數影像。
dst:輸出圖,尺寸大小、深度會和輸入圖相同。
thresh:閾值。
maxval:二值化結果的最大值。
type:二值化操作型態,共有THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO、THRESH_TOZERO_INV五種。
type從上述五種結合CV_THRESH_OTSU,類似寫成:THRESH_BINARY | CV_THRESH_OTSU
以下示範如何用otsu找出閾值,再用此閾值對輸入圖進行二值化
#include <cstdio> #include <opencv2/opencv.hpp> using namespace cv; int main(){ Mat src = imread("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE); Mat dst; threshold(src, dst, 150, 255, THRESH_BINARY|THRESH_OTSU); imshow("origin", src); imshow("threshold", dst); waitKey(0); return 0; }
相关文章推荐
- 自適應閾值(threshold、CV_THRESH_OTSU
- OpenCV Tutorial: 固定閾值(threshold)
- Learning OpenCV cvAdaptiveThreshold 自适应阈值
- cvAdaptiveThreshold用法(opencv参考手册)
- 【OpenCV3】阈值化操作——cv::threshold()与cv::adaptiveThreshold()详解
- OpenCV Tutorial: 區域閾值(adaptiveThreshold)
- OpenCV—固定阈值门限分割cv::threshold
- python-opencv函数总结之(一)threshold、adaptiveThreshold、Otsu 二值化
- Learning OpenCV cvAdaptiveThreshold 自适应阈值
- python-opencv函数总结之(一)threshold、adaptiveThreshold、Otsu 二值化
- Ubuntu 10.04下安装OpenCV及编译一个简单例程(找不到头文件的问题:error: cv.h: No such file or directory )
- OpenCV 3.0中IplImage* 转cv::Mat
- OpenCV Threshold的用法
- opencv基础知识之cvFindContours
- [数字图像处理实验][python+opencv]'module' object has no attribute 'cv'
- OpenCV图片类cv::Mat和QImage之间进行转换(好多相关文章)
- OpenCv IplImage 转 cv::Mat
- OpenCV Tutorial 9 - Chapter 10
- python opencv:AttributeError: 'module' object has no attribute 'cv' FOURCC
- Opencv 笔记 opencv tutorial 2.1节 mat