极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19851|回复: 2

[OpenCV2.4]图像二值化处理

[复制链接]
发表于 2012-8-7 16:20:13 | 显示全部楼层 |阅读模式
我的博客:http://zwmin.com
我的博客上排版会好些。


处理像素值的阈值,图像进行二值化处理。阈值处理方法如下:
  • THRESH_BINARY:二进制阈值化.解释:在运用该阈值类型的时候,先要选定一个特定的阈值量,比如:125,这样,新的阈值产生规则可以解释为大于125的像素点的灰度值设定为最大值(如8位灰度值最大为255),灰度值小于125的像素点的灰度值设定为0。
  • THRESH_BINARY_INV:反二进制阈值化.解释:该阈值化与二进制阈值化相似,先选定一个特定的灰度值作为阈值,不过最后的设定值相反。(在8位灰度图中,例如大于阈值的设定为0,而小于该阈值的设定为255)。
  • THRESH_TRUNC:截断阈值化.解释:同样首先需要选定一个阈值,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变。(例如:阈值选取为125,那小于125的阈值不改变,大于125的灰度值(230)的像素点就设定为该阈值)。
  • THRESH_TOZERO:阈值化为0.解释:先选定一个阈值,然后对图像做如下处理:1 像素点的灰度值大于该阈值的不进行任何改变;2 像素点的灰度值小于该阈值的,其灰度值全部变为0。
  • THRESH_TOZERO_INV:反阈值化为0.解释:原理类似于0阈值,但是在对图像做处理的时候相反,即:像素点的灰度值小于该阈值的不进行任何改变,而大于该阈值的部分,其灰度值全部变为0。
此外,特殊值THRESH_OTSU可以和上述几种情况相结合。在这种情况下,函数确定最佳阀值,使用最大类间方差(OTSU)算法,并使用它,而不是指定的阀值。该函数返回返回计算出来的最佳阀值,目前只支持8位图像。
此外,adaptiveThreshold是自适应阀值函数,既阀值根据适应的规则自适应确定输入。阀值的测定方法有以下几种:
  • ADAPTIVE_THRESH_MEAN_C:阀值T(x,y) 是,(x,y)的附近 blockSize x blockSize 的平均的值减去C的值。
  • ADAPTIVE_THRESH_GAUSSIAN_C:阀值T(x,y) 是,(x,y) 的附近 blockSize x blockSize 的(使用高斯分布)加重平均的值减去C的值.从blockSize确定这高斯分布的标准偏差。
[pre lang="c" line="1"]#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
cv::Mat gray_img = cv::imread(“../../image/lenna.png”, 0);
if(gray_img.empty()) return -1;
// 固定的阀值处理图像
cv::Mat bin_img, bininv_img, trunc_img, tozero_img, tozeroinv_img;
// 输入画像,输出画像,阀值,maxVal,处理阀值的方法
cv::threshold(gray_img, bin_img, 0, 255, cv::THRESH_BINARY|cv::THRESH_OTSU);
cv::threshold(gray_img, bininv_img, 0, 255, cv::THRESH_BINARY_INV|cv::THRESH_OTSU);
cv::threshold(gray_img, trunc_img, 0, 255, cv::THRESH_TRUNC|cv::THRESH_OTSU);
cv::threshold(gray_img, tozero_img, 0, 255, cv::THRESH_TOZERO|cv::THRESH_OTSU);
cv::threshold(gray_img, tozeroinv_img, 0, 255, cv::THRESH_TOZERO_INV|cv::THRESH_OTSU);
// 自适应阀值处理
cv::Mat adaptive_img;
// 输入画像,输出画像,maxVal,阀值決定方法,阀值处理手法,blockSize,C
cv::adaptiveThreshold(gray_img, adaptive_img, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY, 7, 8);
// 结果画像显示
cv::namedWindow(“Binary”, CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::namedWindow(“Binary Inv”, CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::namedWindow(“Trunc”, CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::namedWindow(“ToZero”, CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::namedWindow(“ToZero Inv”, CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::namedWindow(“Adaptive”, CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow(“Binary”, bin_img);
cv::imshow(“Binary Inv”, bininv_img);
cv::imshow(“Trunc”, trunc_img);
cv::imshow(“ToZero”, tozero_img);
cv::imshow(“ToZero Inv”, tozeroinv_img);
cv::imshow(“Adaptive”, adaptive_img);
cv::waitKey(0);
}[/code]
输入画像:
wpid-e28c500125b7b10e4d1fc1f04d027a8e_lenna1.png
结果图像:
wpid-e28c500125b7b10e4d1fc1f04d027a8e_lenna_bin1.png wpid-e28c500125b7b10e4d1fc1f04d027a8e_lenna_bin_inv1.png wpid-e28c500125b7b10e4d1fc1f04d027a8e_lenna_trunc_bin1.png wpid-e28c500125b7b10e4d1fc1f04d027a8e_lenna_tozero_bin1.png wpid-e28c500125b7b10e4d1fc1f04d027a8e_lenna_tozero_bin_inv1.png wpid-e28c500125b7b10e4d1fc1f04d027a8e_lenna_adaptive_bin1.png

回复

使用道具 举报

发表于 2012-8-7 18:20:37 | 显示全部楼层
好牛啊。。。。。。感觉好强大,,,,
回复 支持 反对

使用道具 举报

发表于 2016-6-7 10:54:02 | 显示全部楼层
给楼主点赞
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-7-9 19:55 , Processed in 0.052409 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表