opencv学习-基本阈值操作
Posted 殇堼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv学习-基本阈值操作相关的知识,希望对你有一定的参考价值。
阈值(threshold):图像分割的标尺
1.阈值分割的方法
根据阈值进行分割,其方法包括:
1.二值化:像素值大于某个阈值的设置为255,其余像素都是0,即可实现灰度图像转为二值化图像。
2.反二值化
3.截断
4.阈值取零:小于阈值的像素取零
5.阈值反取零
2.图像的阈值操作API
如下:
double threshold(
InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
);
函数参数含义如下:
(1)InputArray类型的src ,输入图像,多通道、8位或32位浮点。
(2)OutputArray类型的dst ,输出图像,图像的大小、类型、通道数和输入图像相同。
(3)double类型的thresh,阈值。
(4)double类型的maxval,使用THRESH_BINARY 和THRESH_BINARY_INV阈值类型时候的最大值。
(5)int类型的type,阈值类型,取值参见:cv::ThresholdTypes。
3.代码演示
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
//全局变量
Mat src, dst;
int thresholdValue = 127;
int thresholdMax = 255;
int typeValue = 2;
int typeMax = 4;//对应5种阈值分割的方法
const char* output_title = "binary img";//窗口名称“二值化图像”
//定义Threshold_Demo函数,用于图像的阈值
void Threshold_Demo(int, void*)
{
threshold(src, dst, thresholdValue, thresholdMax, typeValue);
imshow(output_title, dst);
}
//主函数入口
int main()
{
src = imread("D:/images/lena.png");
if (src.empty())
{
cout << "could not load image..." << endl;
return -1;
}
imshow("原图", src);
namedWindow(output_title, WINDOW_AUTOSIZE);
createTrackbar("Threshold Value", output_title, &thresholdValue, thresholdMax, Threshold_Demo);//动态调整
createTrackbar("Type Value", output_title, &typeValue, typeMax, Threshold_Demo);
//调用Threshold_Demo函数
Threshold_Demo(0, 0);
imshow(output_title, dst);
waitKey(0);
return 0;
}
4.结果
以上是关于opencv学习-基本阈值操作的主要内容,如果未能解决你的问题,请参考以下文章