C#:图像二值化
2023-08-29 本文已影响0人
大龙10
一、基本阈值化
- OpenCV中基本阈值化操作的函数为threshold,该函数的定义如下:
public static double Threshold(InputArray src, OutputArray dst, double thresh, double maxval, ThresholdTypes type);
- 参数
- src,输入图像;
- dst,输出图像(返回值)。
- thresh,设定的阈值;
- maxval
参数type为THRESH_BINARY或者THRESH_BINARY_INV时的最大值; - type
阈值类型,由ThresholdTypes 定义;
THRESH_BINARY后,阈值化后输入图像中像素值高于阈值的被设置为最大值maxval,低于阈值的设置为0
THRESH_BINARY_INV,阈值化后输入图像中像素值高于阈值的被设置为像素值0,低于阈值的设置为maxval
- 返回结果:
the computed threshold value when type == OTSU
二、自适应阈值化
- 基本阈值化需要读者手动设置阈值进行阈值化操作,阈值的设置需要尝试选出最佳值,自适应阈值化则可以变化阈值完成阈值化操作,OpenCV中提供了自适应阈值化操作的函数adaptiveThreshold
三、程序
二值化 private void uiButton6_Click(object sender, EventArgs e)
{
Mat result = src_img.Clone();
Mat imgLab = new Mat();
Cv2.CvtColor(src_img, imgLab, ColorConversionCodes.BGR2Lab);
Mat[] labArray = Cv2.Split(imgLab); //L, a, b
Mat blur = new Mat();
Cv2. GaussianBlur(labArray[0], blur, new OpenCvSharp.Size(3, 3), 0); //b通道
Mat m6 = new Mat();
string s_yuzhi = uiTextBox2.Text;
//不用大律法二值化;大律法二值的不好
Cv2.Threshold(blur, m6, s_yuzhi.ToInt(), 255, ThresholdTypes.BinaryInv);
m6.CopyTo(dst);
pictureBox1.Image = m6.ToBitmap();
}
四、资料
知乎:
https://zhuanlan.zhihu.com/p/473304766