文档章节

图像二值化(均值法,C语言实现)

t
 tigerBin
发布于 2017/07/25 15:15
字数 309
阅读 165
收藏 0

图像二值化就是将【0,255】之间的灰度数据通过门限值(K)变换为{0,255}的一个数据集合

最简单的方法是取值 K = 127,简单粗暴

或者取值 K = avg(pixels) (像素平均值)


#include "JpegDecoder.h"
#include <stdio.h>
#include <opencv2/highgui.hpp>
#include <math.h>

using namespace JpegCodec;

static cv::Mat ConvertToMat(Matrix &mat)
{
	int channel = CV_8UC3;
	if (mat.channal == 1) channel = CV_8UC1;

	cv::Mat img(mat.rows, mat.cols, channel);  // create a new matrix

	for (int i = 0; i < mat.rows * mat.cols * mat.channal; i++)
	{
		img.data[i] = mat.data[i];
	}

	return img;
}


////方案一 K = 127
//void Binary(Matrix &mat)
//{
//	for (int i = 0; i < mat.rows * mat.cols * mat.channal; i++)
//	{
//		if (mat.data[i] < 127) mat.data[i] = 0;
//		else mat.data[i] = 255;
//	}
//}


//// 方案二 K = avg(pixels)
//void Binary(Matrix &mat)
//{
//	int avg = 0;
//	int cnt = mat.rows * mat.cols * mat.channal;
//	for (int i = 0; i < cnt; i++)
//	{
//		avg += mat.data[i];
//	}
//	avg = avg / cnt;
//
//	for (int i = 0; i < cnt; i++)
//	{
//		if (mat.data[i] < avg) mat.data[i] = 0;
//		else mat.data[i] = 255;
//	}
//}


void ShowImage(Matrix &mat)
{
	cv::Mat img = ConvertToMat(mat);
	cv::imshow("Bitmap", img);
}


// 图像灰度化
void Gray(Matrix &dst, Matrix &src)
{
	dst.Create(src.rows, src.cols, 1);

	for (int i = 0; i < src.rows; i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			int idx = (i * src.rows + j) * 3;
			dst.data[idx / 3] = (src.data[idx] + src.data[idx + 1] + src.data[idx + 2]) / 3;
		}
	}
}


int main(int argc, char *arrv[])
{
	JpegDecoder decoder("01.jpg");
	Matrix mat, dst;
	decoder.Decoder(mat);

	Gray(dst, mat);
	Binary(dst);
	ShowImage(dst);

	cvWaitKey(0);
	return 0;
}

JpegDecoder : https://github.com/lzb-cc/JpegCodecs

 

运行示例

灰度图

K = 127

K = avg(pixels)

© 著作权归作者所有

共有 人打赏支持
t
粉丝 1
博文 65
码字总数 17440
作品 0
武汉
程序员
私信 提问
大津法---OTSU算法

OpenCV的二值化操作中,有一种“大津阈值处理”的方法,使用函数cvThreshold(image,image2,0,255,CVTHRESH_OTSU) 实现,该函数就会使用大律法OTSU得到的全局自适应阈值来进行二值化图片,而参...

moki_oschina
2016/11/24
13
0
4- OpenCV+TensorFlow 入门人工智能图像处理-灰度化处理

图片特效及线段文字的绘制 特效1: 灰度处理 完成彩色图片灰度化。彩色图片有三个颜色通道RGB 灰度图片也是三通道的话,RGB值相等。 单通道的灰度图片的值,需要经过RGB值进行计算。 图中两个...

天涯明月笙
04/08
0
0
[Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/82216380 该系列文章是讲解Python OpenCV图像处理知识,前...

Eastmount
09/02
0
0
手写数字识别系统之图像分割

背景 本文,主要介绍我之前在学校时候,研究的一些跟手写数字识别相关的技术心得,主要涉及:数字图像处理、特征提取、神经网络等等相关的一些技术。。 虽然很多用到的还是网上现有的比较成熟...

ruki
2016/07/30
184
0
手写数字识别系统之数字提取

引言 所谓数字分割就是指将经过二值化后的图像中的单个数字区域进行提取的过程。数字分割在数字识别中是一个必不可少的关键步骤,只有能够将数字进行准确的提取,才能将其一一识别。 数字分割...

ruki
2016/07/30
39
0

没有更多内容

加载失败,请刷新页面

加载更多

手动回滚事物

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

素剑步青尘
9分钟前
0
0
jvm 运行参数归纳

-XX:autoBoxCacheMax 包装类型的缓存最大值参见:https://my.oschina.net/u/2552286/blog/2990515 -XX:autoBoxCacheMax=7777 -Xms256M -Xmx1024M 堆的初始内存与最大内存 在生产中,这两个值...

Canaan_
11分钟前
2
0
iOS 集成Facebook 第三方分享报错[FBSDKInternalUtility validateAppID]: failed for URL: "fbauth2:/" - error:

出现这种原因主要是因为info.plist文件里面没有添加一些配置文件

HOrange
16分钟前
1
0
轻松上云系列之二:其他云数据迁移至阿里云

本文档围绕如何将您其他云厂商上的数据迁移到阿里云,提供了多个场景的实践方案。 文档合集 AWS 数据迁移至阿里云 Amazon S3数据迁移到OSS 从AWS RDS迁移MySQL到阿里云RDS AWS S3迁移到OSS(...

阿里云官方博客
16分钟前
0
0
架构师的黄金证书---TOGAF

https://baijiahao.baidu.com/s?id=1590528955022289848&wfr=spider&for=pc

swingcoder
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部