文章目录
1. 图像格式
1.1 灰度图像
灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。
1.2 RGB888图像
RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
256级的RGB色彩总共能组合出约1678万种色彩,即256×256×256=16777216。通常也被简称为1600万色或千万色。也称为24位色(2的24次方)。
2. 图像反相
“反相”即为图像的颜色色相反转。以前照相机的底片就是打印后的照片的反相。比如黑变白,蓝变黄、红变绿。
对灰度级范围为[0 , L-1]的一幅图像进行反转的操作为:s = L - 1 - r
其中r和s分别代表处理前后的像素值。使用这种方式反转一幅图像的灰度级,可得到等效的照片底片。
这种类型的处理特别适用于增强嵌入在一幅图像的暗区域中的白色和灰色细节,特别是当黑色面积在尺寸上占主导地位时。
3. 代码&运行
3.1 平台:VS2015 + C语言
界面截图:

流程:
开始 -> 读取RAW格式图片 -> 保存至二维数组 -> 数组每个元素进行“255-”操作 -> 将二维数组生成RAW格式文件 -> 用PS查看图片操作结果
结果:
在工程目录下生成了output.raw文件,用PS打开显示结果如下

对彩色进行操作:

彩色图像为三通道,故而代码中修改宽度乘以3

遇到问题:
修改代码后直接运行报错如下——

经查找原因得知图像较大,静态数组不够。
解决方法:
修改为动态数组进行图片的操作,解决问题

代码:
#include <stdio.h>
#include <stdlib.h>
#define height 600
#define width 800
typedef unsigned char BYTE; // 定义BYTE类型,占1个字节
int main(void)
{
FILE *fp = NULL;
BYTE Pic[height][width];
BYTE *ptr;
int i, j;
fp = fopen("weiminglake.raw", "rb")

本文介绍灰度图像与RGB图像的基本概念,探讨图像反相技术及其在不同平台上的实现方法,包括C语言、OpenCV和Matlab。通过实际案例展示了如何反转图像颜色,增强图像细节。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



