既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
(3)截断 (truncate)
左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
(4)阈值取零 (threshold to zero)
左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值。
(5)阈值反取零(threshold to zero inverted)
左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值。
(6)THRESH_OTSU:标志来应用Otsu阈值处理。
Otsu方法是一种自动确定图像阈值的算法,它可以根据图像的灰度分布自适应地选择最佳阈值。
threshold(grayImage, dst, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
Otsu会自动进行阈值设置,所以预设值为0即可,最大为255.
(7)THRESH_TRIANGLE:标志进行阈值处理。
它可以根据图像的灰度分布自适应地选择最佳阈值。THRESH_TRIANGLE方法通过寻找直方图的双峰之间的谷底来确定阈值。
需要注意的是,THRESH_TRIANGLE方法适用于具有双峰灰度分布的图像,对于其他类型的图像效果可能不理想。因此,在使用THRESH_TRIANGLE阈值处理之前,建议先观察图像的灰度直方图,确保图像具有双峰特性。
总结:阈值分割有5种方法,阈值寻找有2种方法。
另外可以了解:
(1)多级化阈值:将图像分为多个类别,每个类别代表一种特定的像素强度范围。通常用于图像分割和物体识别任务。
(2)自适应阈值:根据图像局部区域的统计特征来确定阈值,使得不同区域具有相对合适的阈值。适用于图像 不均匀光照或对比度变化较大的情况。
(3)基于直方图的阈值:利用图像的直方图信息来确定阈值,如Otsu’s方法、基于最大类间方差、基于最小错误率等。
3、代码演示
(1)了解下createTrackbar,很实用一个接口。
createTrackbar是OpenCV中用于创建滑动条的函数。它可以在图像窗口中创建一个滑动条,通过滑动条来调整参数或阈值,实现实时交互。
int createTrackbar(
const String& trackbarname, // 滑动条的名称
const String& winname, // 滑动条所在的窗口名称
int* value, int count, // 初始值
TrackbarCallback onChange = 0, // 滑动条的最大值
void* userdata = 0 // 滑动条的回调函数);
(2)例子展示
#include<opencv2\opencv.hpp>
#include<iostream>
#include <math.h>
using namespace cv;
// 图像阈值
Mat src, gray_src, dst;
int threshold_value = 127;
int threshold_max = 255;
int type_value = 2;
int type_max = 4;
const char* input_title = "input image";
const char* output_title = "binary image";
void Threshold_Demo(int, void*);
int main(int argc, char** argv)
{
src = imread("test.jpg");
if (!src.data)
{
printf("could not load image...");
return -1;
}
namedWindow(input_title, CV_WINDOW_AUTOSIZE);
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
imshow(input_title, src);
createTrackbar("Threshold Value:", output_title, &threshold_value, threshold_max, Threshold_Demo);
createTrackbar("Type Value:", output_title, &type_value, type_max, Threshold_Demo);
Threshold_Demo(0, 0);
waitKey(0);
return 0;
}
void Threshold_Demo(int, void*)
{
cvtColor(src, gray_src, CV_BGR2GRAY);
// 单纯阈值的二值化
// threshold(gray_src, dst, threshold_value, threshold_max, THRESH_BINARY);
//THRESH_OTSU去找阈值的话,就会忽略预设的阈值,所以为0即可,最大值是255
threshold(gray_src, dst, 0, 255, THRESH_OTSU | type_value);
imshow(output_title, dst);
}
效果展示:
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新