文档章节

图像灰度化(C语言实现)

t
 tigerBin
发布于 2017/07/25 09:46
字数 283
阅读 75
收藏 1
点赞 0
评论 0

RGB三色图变成【0,255】的灰度图的简单方法

方法1. 取RGB的平均值,即 pixel(i , j) = R(i , j) + G(i , j) + B(i , j) 

方法2. 颜色空间的转换(RGB -> YUV),取Y分量(YUV中的 Y表示亮度)计算公式

pixel(i , j) = 0.3 * R(i , j) + 0.59 * G(i , j) + 0.11 * B(i , j)


#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;
}


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;
		}
	}
}

/* 方法二 */
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] = 0.3 * src.data[idx] + 0.59 * src.data[idx + 1] + 0.11 * src.data[idx + 2];
		}
	}
}

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

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

	cvWaitKey(0);
	return 0;
}

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

运行示例

© 著作权归作者所有

共有 人打赏支持
t
粉丝 0
博文 61
码字总数 16992
作品 0
武汉
程序员
大津法---OTSU算法

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

moki_oschina ⋅ 2016/11/24 ⋅ 0

图像的灰度图 和 二值化的概念

原文地址 在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红、绿、蓝三原色来表示真彩色,R分量,G分量,B分量的取值范围均为0~255,比如电脑屏幕上的一个红色的像素点的三个...

liuhongyi0104 ⋅ 03/23 ⋅ 0

(三)matlab数字图像处理实验-图像灰度变换处理

前两节都是熟悉一下怎么在matlab底下对图片做一些操作,并没有什么卵用,这一节稍微有点卵用,灰度变换一般是图像处理的第一步。 数字图像处理实验1-9点击下列链接有源码和链接: matlab数字...

aninstein ⋅ 01/06 ⋅ 0

图像分析之直方图分析

图像分析之强度直方图分析 直方图介绍 强度直方图图形化显示不同的像素值在不同的强度值上的出现频率,对于灰度图像来说强度 范围为[0~255]之间,对于RGB的彩色图像可以独立显示三种颜色的强...

iamfish ⋅ 2012/04/22 ⋅ 0

python 计算机视觉 1.3.4直方图均衡化

图像灰度变换中一个非常有用的例子就是直方图均衡化。直方图均衡化是指将一幅 图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。在对图 像做进一步处理之前,直方图均衡化...

vino6520 ⋅ 04/19 ⋅ 0

Java基于opencv实现图像数字识别(二)—基本流程

Java基于opencv实现图像数字识别(二)—基本流程 做一个项目之前呢,我们应该有一个总体把握,或者是进度条;来一步步的督促着我们来完成这个项目,在我们正式开始前呢,我们先讨论下流程。 ...

奇迹迪 ⋅ 06/10 ⋅ 0

Canny边缘检测算法原理及其VC实现详解(一)

图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。图象的边缘部分集中了图...

hejunbinlan ⋅ 2015/09/08 ⋅ 0

【图像处理】彩色图像处理(Color Image Processing)

实验要求   (1.a) 编写程序实现图6.23,程序的输入为图像中指定的两个灰度级范围。程序的输出为RGB 格式图像,其中,一个灰度级范围显示为指定的彩色,其余的像素以RGB 形式显示为与输入图像...

u013165921 ⋅ 01/15 ⋅ 0

【图像处理】图像强度变换、直方图均衡化(Image Intensity Transformations and Histogram Equalization)

实验要求   该实验使用强度变换方法对图像进行增强。实验图像为图3.8(a)   (1.a) 用公式(3.2-2)所示的对数变换方法进行图像增强。   (1.b) 用公式(3.2-3)形式的指数变换方法进行图像增...

u013165921 ⋅ 01/14 ⋅ 0

灰度图像的阈值化

通过对灰度图像二值化处理,能够凸现出感兴趣目标的轮廓. 灰度图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适...

文艺小青年 ⋅ 2017/07/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Mahout推荐算法之SlopOne

一、 算法原理 有别于基于用户的协同过滤和基于item的协同过滤,SlopeOne采用简单的线性模型估计用户对item的评分。如下图,估计UserB对ItemJ的偏好 图(1) 在真实情况下,该方法有如下几个...

xiaomin0322 ⋅ 27分钟前 ⋅ 0

LVM讲解

LVM是什么 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地...

李超小牛子 ⋅ 36分钟前 ⋅ 0

mysql更改密码、连接mysql、mysql常用命令

1. 更改mysql的root账户密码: mysql中root账户和系统root不是一个账户 1.1 更改环境变量PATH,增加mysql绝对路径 由于mysql安装目录为/usr/local/mysql/,所以系统不能直接使用mysql,需把/...

laoba ⋅ 38分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

猫耳m ⋅ 38分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

阿里云云栖社区 ⋅ 41分钟前 ⋅ 0

1.03-Maven中使用ueditor富文本编辑器

起因:在maven仓库未找到百度的ueditor的jar包 操作: 1.下载百度的ueditor的jar包 2.打开命令行,切换到ueditor的下载位置,运行一下命令: mvn install:install-file -Dfile=ueditor-1.1....

静以修身2025 ⋅ 47分钟前 ⋅ 0

几道Spring 面试题

1、BeanFactory 接口和 ApplicationContext 接口有什么区别? ApplicationContext 接口继承BeanFactory接口 Spring核心工厂是BeanFactory BeanFactory采取延迟加载,第一次getBean时才会初始...

职业搬砖20年 ⋅ 56分钟前 ⋅ 0

包饺子

http://storage.slide.news.sina.com.cn/slidenews/77_ori/2018_24/74766_826131_625489.gif

霜叶情 ⋅ 57分钟前 ⋅ 0

xml解析

方法一: String s_xml1 = "<xml>" + "<head>lalalalal</head>" + "<body>1234</body>" + "</xml>"; try { DocumentBuilderFactory documentBuilderFactory......

GithubXD ⋅ 今天 ⋅ 0

reuse stream

Although Java streams were designed to be operated only once, programmers still ask how to reuse a stream. From a simple web search, we can find many posts with this same issue ......

idoz ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部