文章目录 opencv 图像阈值 二值化处理图像阈值threshold 函数阈值类型图解DEMO效果
图像阈值
设定一个阈值,将图片数据大于这个阈值和小于这个阈值的部分区分开来,常用的二值化处理就是将大于阈值的设置为255,小于阈值的设置为0。二值化处理目前只支持8位单通道图像。
也可以用于消除噪声(即滤除过小或过大的像素)。
蓝色为原始数据值,红色为阈值
THRESH_BINARY_INV 大于阈值部分被置为0,小于部分被置为255
THRESH_TRUNC 大于阈值部分被置为threshold,小于部分保持原样
THRESH_TOZERO 小于阈值部分被置为0,大于部分保持不变
THRESH_TOZERO_INV 大于阈值部分被置为0,小于部分保持不变
DEMO int main() {cv::namedWindow("src",0);cv::namedWindow("dst", 0);cv::Mat src(255, 500, CV_8UC1, cv::Scalar(0));for (int i = 0; i < src.rows; ++i) {for (int j = 0; j < src.cols; ++j){src.at<unsigned char>(i, j) = i;}}cv::imshow("src", src);cv::imwrite("./src.jpg", src);cv::Mat dst;double r = cv::threshold(src, dst, 128, 255, cv::THRESH_BINARY);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_BINARY.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_BINARY_INV);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_BINARY_INV.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_TRUNC);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_TRUNC.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_TOZERO);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_TOZERO.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_TOZERO_INV);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_TOZERO_INV.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_OTSU);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_OTSU.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_TRIANGLE);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_TRIANGLE.jpg", dst);cv::waitKey(0);} 效果
src原图
THRESH_BINARY 大于阈值的部分被置为255,小于部分被置为0
THRESH_BINARY_INV 大于阈值部分被置为0,小于部分被置为255
THRESH_TRUNC 大于阈值部分被置为threshold,小于部分保持原样
THRESH_TOZERO 小于阈值部分被置为0,大于部分保持不变
THRESH_TOZERO_INV 大于阈值部分被置为0,小于部分保持不变
THRESH_OTSU 二值化的一个很优的算法Otsu大津算法
THRESH_TRIANGLE