数字图像处理-1-DDB,DIB以及Bitmap

VHDL按键消抖(状态机版本) 检测下降沿:设置一个和,分别代表之前的之前和之前的信号状态,若两个信号key_in_d2=1,key_in_d1=0,他俩的not key_in_d2 and key_in_d1为1,则说明下降沿产生,把它设置为标志位key_flag。延时计数:50MHz的板子每次计数需要20ns,而抖动时间大约为5-10ms。所以取7ms,作为延时时间。可以看见当检测到下降沿时,开始计数计数计满再次检测,若为低电平则为按下按键,否则为抖动。通过检测下降沿来临,延时计数再次检测,如果为低电平则为按键按下。 阅读详情

背景

之前学习过 杨淑莹老师的-<<VC++图像处理程序设计>>,当时只是把视频教程看了一遍,没有做一些实验,根基不牢.后续会根据杨老师的教程,把该做的实验都做一遍. 关于图像处理方面,虽然现在已经都是深度学习,大语言模型了,但这里我觉得还是有必要记录一下.

1.DDB

DDB 全称device dependent bitmap,即设备有关的位图,DDB数据本身不带颜色信息,颜色信息和具体的显示设备有关.我的理解是DDB数据存放的是颜色的索引信息,在不同设备上存在不同的调色板,然后根据颜色的索引,从调色板中找到颜色信息,所以这个颜色是和具体设备有关的.

比如:
一个2 x 2的DDB数据为
[22, 33]
[12, 38]
那么在不同设备上的调色板dev1colorTable[255], dev2ColorTable[255],这2个调色板中保存是相关设备的颜色信息,他们应该是不同的,所以同一个索引,在不同索引下可能得到不同的颜色信息.

2.DIB

DIB全称是device independent bitmap,即设备无关位图. 为什么无关呢.主要是因为这种位图数据中包含了颜色信息.针对于非真彩色的图片(24bit),它的图像中是带有颜色表信息的,后面会有实验做详细介绍的.

3.Bitmap的结构

Bitmap图像文件一般包含如下4个部分

  • Bitmap文件头
  • Bitmap图像信息头
  • 颜色表
  • 图像数据

后续的实验都会用bitmap来演示

3.1 Bitmap文件头

注意:

  • WORD:2个bytes,
  • DWORD:4bytes,

下面是BItmap文件头的信息,其中包含文件类型,必须是"BM"(图中有错误)
在这里插入图片描述

3.2 Bitmap信息头

这部分包含了位图相关的一些属性,包含图像宽,高,大小,以及像素的bitcount.
在这里插入图片描述

3.3 颜色表

注意只有非真彩(非24bit)的图像有颜色表,真彩图像因为已经是24bit的RGB数据,它已经不需要颜色信息了.

3.4 位图数据

在文件最后是位图数据部分,这里特别要注意的是一个byte代表几个像素. 关于这个要从bitCount中获取信息了.
不同的bitCount,每个byte对应不同数量的像素

  • 当上面biBitCount为1时,表示8个像素占用1个字节,其实这种情况下,位图就是单色图,或二值图
  • 当上面biBitCount为4时,表示2个像素占用1个字节
  • 当上面biBitCount为8时,表示1个像素占用1个字节
  • 当上面biBitCount为24时,表示1个像素占用3个字节

4. 位图实验

这里我用AI写了一个python脚本,用来解析bitmap图像的信息

4.1 实验1(分辨率15x16)

  • 原始图像: 这个图像是一个15x16的闹钟的图片.
    在这里插入图片描述
  • windows位图信息:
    从下面能够获取到图片大小为246,分辨率为15x16(宽高)
    在这里插入图片描述
  • 解析结果:
    这个解析脚本可以解析文件头,bitmap信息头,颜色表以及图像数据.最后会打印出图像数据
--- 开始解析 BMP 文件: .\Icons\Alarm.bmp --- \
	
	--- BMP File Header (文件头) ---
	  Signature (文件标识): BM (b'BM')
	  File Size (文件大小): 246 bytes (0xf6)
	  Reserved1 (保留字段1): 0 (0x0)
	  Reserved2 (保留字段2): 0 (0x0)
	  Data Offset (数据偏移): 118 bytes (0x76)
	
	--- BMP Info Header (信息头) ---
	  Header Size (信息头大小): 40 bytes (0x28)
	  Width (图像宽度): 15 pixels
	  Height (图像高度): 16 pixels
	  Planes (颜色平面): 1
	  Bits Per Pixel (位深度): 4 bit(s)
	  Compression (压缩方式): BI_RGB (不压缩)
	  Image Size (图像数据大小): 128 bytes (0表示未压缩或需计算)
	  X Pixels Per Meter (水平分辨率): 2850 ppm
	  Y Pixels Per Meter (垂直分辨率): 2850 ppm
	  Colors Used (使用颜色数): 16
	  Important Colors (重要颜色数): 16
	
	--- BMP Color Palette (颜色表) ---
	  预期颜色表项数 (根据位深): 16
	  实际颜色表项数 (由Header指定): 16
	    [000] RGB(  0,   0,   0) - Raw: (00 00 00 00)
	    [001] RGB(128,   0,   0) - Raw: (00 00 80 00)
	    [002] RGB(  0, 128,   0) - Raw: (00 80 00 00)
	    [003] RGB(128, 128,   0) - Raw: (00 80 80 00)
	    [004] RGB(  0,   0, 128) - Raw: (80 00 00 00)
	    [005] RGB(128,   0, 128) - Raw: (80 00 80 00)
	    [006] RGB(  0, 128, 128) - Raw: (80 80 00 00)
	    [007] RGB(127, 127, 127) - Raw: (7f 7f 7f 00)
	    [008] RGB(191, 191, 191) - Raw: (bf bf bf 00)
	    [009] RGB(255,   0,   0) - Raw: (00 00 ff 00)
	    [010] RGB(  0, 255,   0) - Raw: (00 ff 00 00)
	    [011] RGB(255, 255,   0) - Raw: (00 ff ff 00)
	    [012] RGB(  0,   0, 255) - Raw: (ff 00 00 00)
	    [013] RGB(255,   0, 255) - Raw: (ff 00 ff 00)
	    [014] RGB(  0, 255, 255) - Raw: (ff ff 00 00)
	    [015] RGB(255, 255, 255) - Raw: (ff ff ff 00)
	
	--- BMP Bitmap Data (位图数据) ---
	  当前文件指针位置: 118 bytes
	  声明的数据偏移量: 118 bytes
	  文件指针已位于位图数据起始处。
	  剩余待读取数据大小: 128 bytes
	  计算的扫描线大小 (含填充): 8 bytes
	  计算的总数据大小: 128 bytes
	
	  数据内容 (按每行16个字节显示):
	    00000076: 30 01 30 00 00 31 00 33 33 10 00 90 90 00 13 33  | b'0\x010\x00\x001\x0033\x10\x00\x90\x90\x00\x133'
	    00000086: 33 00 98 f0 f8 90 03 33 37 09 80 ff f0 89 07 33  | b'3\x00\x98\xf0\xf8\x90\x0337\t\x80\xff\xf0\x89\x073'
	    00000096: 30 99 ff 0f ff f9 90 33 30 90 ff f0 ff 00 90 33  | b'0\x99\xff\x0f\xff\xf9\x9030\x90\xff\xf0\xff\x00\x903'
	    000000a6: 30 99 ff f0 ff f9 90 33 37 09 80 f0 f0 89 07 3c  | b'0\x99\xff\xf0\xff\xf9\x9037\t\x80\xf0\xf0\x89\x07<'
	    000000b6: 33 00 98 f0 f8 90 03 30 00 00 09 99 99 00 00 03  | b'3\x00\x98\xf0\xf8\x90\x030\x00\x00\t\x99\x99\x00\x00\x03'
	    000000c6: 08 87 00 00 00 08 77 03 08 88 87 70 78 88 87 03  | b'\x08\x87\x00\x00\x00\x08w\x03\x08\x88\x87px\x88\x87\x03'
	    000000d6: 30 78 80 70 70 88 70 33 33 70 03 30 33 00 73 33  | b'0x\x80pp\x88p33p\x0303\x00s3'
	    000000e6: 33 33 33 00 03 33 33 33 33 33 33 33 33 33 33 33  | b'333\x00\x0333333333333'
	
	--- BMP Decoded Pixels (解码后的像素) ---
	  使用颜色表解析 15x16 像素数据...
	  总共解析出 240 个像素索引。
	  按 15x16 布局打印 (注意BMP图像通常从底部开始存储):
	  Row   0: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
	  Row   1: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
	  Row   2: [128,128,  0] [128,128,  0] [127,127,127] [  0,  0,  0] [  0,  0,  0] [128,128,  0] [128,128,  0] [  0,  0,  0] [128,128,  0] [128,128,  0] [  0,  0,  0] [  0,  0,  0] [127,127,127] [128,128,  0] [128,128,  0]
	  Row   3: [128,128,  0] [  0,  0,  0] [127,127,127] [191,191,191] [191,191,191] [  0,  0,  0] [127,127,127] [  0,  0,  0] [127,127,127] [  0,  0,  0] [191,191,191] [191,191,191] [127,127,127] [  0,  0,  0] [128,128,  0]
	  Row   4: [  0,  0,  0] [191,191,191] [191,191,191] [191,191,191] [191,191,191] [127,127,127] [127,127,127] [  0,  0,  0] [127,127,127] [191,191,191] [191,191,191] [191,191,191] [191,191,191] [127,127,127] [  0,  0,  0]
	  Row   5: [  0,  0,  0] [191,191,191] [191,191,191] [127,127,127] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [191,191,191] [127,127,127] [127,127,127] [  0,  0,  0]
	  Row   6: [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [255,  0,  0] [255,  0,  0] [255,  0,  0] [255,  0,  0] [255,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0]
	  Row   7: [128,128,  0] [128,128,  0] [  0,  0,  0] [  0,  0,  0] [255,  0,  0] [191,191,191] [255,255,255] [  0,  0,  0] [255,255,255] [191,191,191] [255,  0,  0] [  0,  0,  0] [  0,  0,  0] [128,128,  0] [128,128,  0]
	  Row   8: [128,128,  0] [127,127,127] [  0,  0,  0] [255,  0,  0] [191,191,191] [  0,  0,  0] [255,255,255] [  0,  0,  0] [255,255,255] [  0,  0,  0] [191,191,191] [255,  0,  0] [  0,  0,  0] [127,127,127] [128,128,  0]
	  Row   9: [128,128,  0] [  0,  0,  0] [255,  0,  0] [255,  0,  0] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,  0,  0] [255,  0,  0] [  0,  0,  0] [128,128,  0]
	  Row  10: [128,128,  0] [  0,  0,  0] [255,  0,  0] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [255,255,255] [  0,  0,  0] [  0,  0,  0] [255,  0,  0] [  0,  0,  0] [128,128,  0]
	  Row  11: [128,128,  0] [  0,  0,  0] [255,  0,  0] [255,  0,  0] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,  0,  0] [255,  0,  0] [  0,  0,  0] [128,128,  0]
	  Row  12: [128,128,  0] [127,127,127] [  0,  0,  0] [255,  0,  0] [191,191,191] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [191,191,191] [255,  0,  0] [  0,  0,  0] [127,127,127] [128,128,  0]
	  Row  13: [128,128,  0] [128,128,  0] [  0,  0,  0] [  0,  0,  0] [255,  0,  0] [191,191,191] [255,255,255] [  0,  0,  0] [255,255,255] [191,191,191] [255,  0,  0] [  0,  0,  0] [  0,  0,  0] [128,128,  0] [128,128,  0]
	  Row  14: [128,128,  0] [128,128,  0] [128,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [255,  0,  0] [  0,  0,  0] [255,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [128,  0,  0] [128,128,  0] [128,128,  0]
	  Row  15: [128,128,  0] [  0,  0,  0] [  0,  0,  0] [128,  0,  0] [128,128,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [128,128,  0] [128,  0,  0] [  0,  0,  0] [  0,  0,  0] [128,128,  0]

从上面的解析结果可以获取到图片的bitCount为4,即1个byte可以表示2个像素. 那么从最后的图像数据可以验证,最后打印的RGB值是否正确. 这里要特别注意 注意BMP图像通常从底部开始存储.

因为BMP图像是从底部开始存储的,那么最后一个行对应的原始图像数据为:

30 01 30 00 00 31 00 33
上面其实为颜色的索引,因为每个byte对应2个像素,所以分开后为
0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01 0x00 0x00 0x03 0x00
这里最后一个0x00是要舍弃的,因为图像的宽度是15.

因为颜色表如下,结合上面的索引即可得到真实的RGB信息.

        [000] RGB(  0,   0,   0) - Raw: (00 00 00 00)
	    [001] RGB(128,   0,   0) - Raw: (00 00 80 00)
	    [002] RGB(  0, 128,   0) - Raw: (00 80 00 00)
	    [003] RGB(128, 128,   0) - Raw: (00 80 80 00)
	    [004] RGB(  0,   0, 128) - Raw: (80 00 00 00)
	    [005] RGB(128,   0, 128) - Raw: (80 00 80 00)
	    [006] RGB(  0, 128, 128) - Raw: (80 80 00 00)
	    [007] RGB(127, 127, 127) - Raw: (7f 7f 7f 00)
	    [008] RGB(191, 191, 191) - Raw: (bf bf bf 00)
	    [009] RGB(255,   0,   0) - Raw: (00 00 ff 00)
	    [010] RGB(  0, 255,   0) - Raw: (00 ff 00 00)
	    [011] RGB(255, 255,   0) - Raw: (00 ff ff 00)
	    [012] RGB(  0,   0, 255) - Raw: (ff 00 00 00)
	    [013] RGB(255,   0, 255) - Raw: (ff 00 ff 00)
	    [014] RGB(  0, 255, 255) - Raw: (ff ff 00 00)
	    [015] RGB(255, 255, 255) - Raw: (ff ff ff 00)

所以最后一行的RGB数据

Row 15: [128,128, 0] [ 0, 0, 0] [ 0, 0, 0] [128, 0, 0] [128,128, 0] [ 0, 0, 0] [ 0, 0, 0] [ 0, 0, 0] [ 0, 0, 0] [ 0, 0, 0] [128,128, 0] [128, 0, 0] [ 0, 0, 0] [ 0, 0, 0] [128,128, 0]

4.2 实验2(分辨率16x16)

下面是另外一个位图的信息(16x16),这是为了和上面对比的

  • 原始图像:
    这是一本打开的书籍
    在这里插入图片描述
  • windows图像属性
    可以看到图像分辨率为16x16,实际大小为246 bytes, 注意这里能看到,虽然分辨率比上面的实验大,但是它俩的数据大小是一样的. 这是因为,在15x16分辨率下,因为最后一列的像素虽然是4bit的数据,但是它也占用1个字节的空间,因而大小和16x16图像的大小是一样的.
    在这里插入图片描述
  • 解析结果:
--- 开始解析 BMP 文件: .\Icons\BookOpen.bmp ---

--- BMP File Header (文件头) ---
  Signature (文件标识): BM (b'BM')
  File Size (文件大小): 246 bytes (0xf6)
  Reserved1 (保留字段1): 0 (0x0)
  Reserved2 (保留字段2): 0 (0x0)
  Data Offset (数据偏移): 118 bytes (0x76)

--- BMP Info Header (信息头) ---
  Header Size (信息头大小): 40 bytes (0x28)
  Width (图像宽度): 16 pixels
  Height (图像高度): 16 pixels
  Planes (颜色平面): 1
  Bits Per Pixel (位深度): 4 bit(s)
  Compression (压缩方式): BI_RGB (不压缩)
  Image Size (图像数据大小): 128 bytes (0表示未压缩或需计算)
  X Pixels Per Meter (水平分辨率): 2850 ppm
  Y Pixels Per Meter (垂直分辨率): 2850 ppm
  Colors Used (使用颜色数): 16
  Important Colors (重要颜色数): 16

--- BMP Color Palette (颜色表) ---
  预期颜色表项数 (根据位深): 16
  实际颜色表项数 (由Header指定): 16
    [000] RGB(  0,   0,   0) - Raw: (00 00 00 00)
    [001] RGB(128,   0,   0) - Raw: (00 00 80 00)
    [002] RGB(  0, 128,   0) - Raw: (00 80 00 00)
    [003] RGB(128, 128,   0) - Raw: (00 80 80 00)
    [004] RGB(  0,   0, 128) - Raw: (80 00 00 00)
    [005] RGB(128,   0, 128) - Raw: (80 00 80 00)
    [006] RGB(  0, 128, 128) - Raw: (80 80 00 00)
    [007] RGB(127, 127, 127) - Raw: (7f 7f 7f 00)
    [008] RGB(191, 191, 191) - Raw: (bf bf bf 00)
    [009] RGB(255,   0,   0) - Raw: (00 00 ff 00)
    [010] RGB(  0, 255,   0) - Raw: (00 ff 00 00)
    [011] RGB(255, 255,   0) - Raw: (00 ff ff 00)
    [012] RGB(  0,   0, 255) - Raw: (ff 00 00 00)
    [013] RGB(255,   0, 255) - Raw: (ff 00 ff 00)
    [014] RGB(  0, 255, 255) - Raw: (ff ff 00 00)
    [015] RGB(255, 255, 255) - Raw: (ff ff ff 00)

--- BMP Bitmap Data (位图数据) ---
  当前文件指针位置: 118 bytes
  声明的数据偏移量: 118 bytes
  文件指针已位于位图数据起始处。
  剩余待读取数据大小: 128 bytes
  计算的扫描线大小 (含填充): 8 bytes
  计算的总数据大小: 128 bytes

  数据内容 (按每行16个字节显示):
    00000076: 33 33 33 33 33 33 33 33 33 33 33 3c 0c 33 33 33  | b'33333333333<\x0c333'
    00000086: 33 33 3c c0 f0 c3 33 33 33 33 c7 0f 0f 0c 33 33  | b'33<\xc0\xf0\xc33333\xc7\x0f\x0f\x0c33'
    00000096: 33 3c 00 ff f0 f0 c3 33 3c c0 ff ff ff 0f 0c 33  | b'3<\x00\xff\xf0\xf0\xc33<\xc0\xff\xff\xff\x0f\x0c3'
    000000a6: c7 0f 0f ff ff f0 f0 c3 00 ff f0 ff ff ff 0f 0c  | b'\xc7\x0f\x0f\xff\xff\xf0\xf0\xc3\x00\xff\xf0\xff\xff\xff\x0f\x0c'
    000000b6: 0f ff ff 0f ff ff f0 f0 30 ff ff f0 ff ff ff 03  | b'\x0f\xff\xff\x0f\xff\xff\xf0\xf00\xff\xff\xf0\xff\xff\xff\x03'
    000000c6: 33 0f ff ff 0f ff 00 33 33 30 ff ff f0 00 33 33  | b'3\x0f\xff\xff\x0f\xff\x00330\xff\xff\xf0\x0033'
    000000d6: 33 33 0f ff 03 33 33 33 33 33 30 00 33 33 33 33  | b'33\x0f\xff\x03333330\x003333'
    000000e6: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33  | b'3333333333333333'

--- BMP Decoded Pixels (解码后的像素) ---
  使用颜色表解析 16x16 像素数据...
  总共解析出 256 个像素索引。
  按 16x16 布局打印 (注意BMP图像通常从底部开始存储):
  Row   0: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
  Row   1: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
  Row   2: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
  Row   3: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
  Row   4: [128,128,  0] [128,128,  0] [128,128,  0] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [  0,  0,  0] [  0,  0,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
  Row   5: [128,128,  0] [128,128,  0] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [  0,  0,  0] [128,128,  0] [128,128,  0]
  Row   6: [128,128,  0] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [128,128,  0]
  Row   7: [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [  0,  0,  0]
  Row   8: [  0,  0,  0] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [  0,  0,  0] [  0,  0,255]
  Row   9: [  0,  0,255] [127,127,127] [  0,  0,  0] [255,255,255] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [  0,  0,  0] [  0,  0,255] [128,128,  0]
  Row  10: [128,128,  0] [  0,  0,255] [  0,  0,255] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [  0,  0,  0] [  0,  0,255] [128,128,  0] [128,128,  0]
  Row  11: [128,128,  0] [128,128,  0] [128,128,  0] [  0,  0,255] [  0,  0,  0] [  0,  0,  0] [255,255,255] [255,255,255] [255,255,255] [  0,  0,  0] [255,255,255] [  0,  0,  0] [  0,  0,255] [128,128,  0] [128,128,  0] [128,128,  0]
  Row  12: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [  0,  0,255] [127,127,127] [  0,  0,  0] [255,255,255] [  0,  0,  0] [255,255,255] [  0,  0,  0] [  0,  0,255] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
  Row  13: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [  0,  0,255] [  0,  0,255] [  0,  0,  0] [255,255,255] [  0,  0,  0] [  0,  0,255] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
  Row  14: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [  0,  0,255] [  0,  0,  0] [  0,  0,255] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]
  Row  15: [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0] [128,128,  0]

用74LS160和74LS194搭个复古流水灯:从Multisim仿真到面包板实战(附完整电路图) 本文详细介绍了如何使用74LS160和74LS194芯片搭建复古流水灯电路,从Multisim仿真到面包板实战的全过程。通过解析核心器件特性、提供完整材料清单、仿真验证电路逻辑,以及实际搭建中的布局规划和调试技巧,帮助电子爱好者掌握这一经典数字电路设计项目。 阅读详情

相关推荐

从数据到特征:基于CAT12的MRI图像预处理实战指南

本文详细介绍了使用CAT12工具进行MRI图像预处理的完整实战流程。从数据获取、环境搭建到核心的AC-PC校正、组织分割、空间标准化与调制,逐步解析如何将原始脑影像数据转化为可用于机器学习的标准化特征图。重点阐述了预处理作为脑影像分析‘生命线’的重要性,并提供了避坑指南与自动化脚本建议,帮助研究者构建高质量的阿尔茨海默症分类模型输入特征。

weixin_29065959的博客 309

DDB与DIB

设备相关位图(DDB) 在Windows中有两种类型的位图:DDB位图(与设备相关位图)及DIB位图(与设备无关位图).与设备相关位图(device-dependent bitmap)是一种内部位图格式,它由MFC库6.0版本CBitmap类定义,有一个与之关联的Windows数据结构. DDB中不包括颜色信息,显示时是以系统的调色板为基础进行各位的颜色映射.它显示的图像依计算机显示系

597

RTL8306MB交换芯片驱动开发避坑指南:从硬件接线到SDK移植全流程解析

本文详细解析了RTL8306MB交换芯片驱动开发的全流程,重点从硬件接线、SDK移植到实战调试。针对RMII模式下的常见问题,特别是TXEN与RXDV信号交叉连接等关键“坑点”,提供了清晰的排查指南和解决方案,旨在帮助嵌入式工程师高效完成网络设备开发。

277

DIB(Device-Independent Bitmap,即设备无关位图)小知识

DIB(Device-Independent Bitmap,即设备无关位图)小知识 简介 位图一共有两种类型,即:设备相关位图(DDB)和设备无关位图(DIB)。DDB位图在早期的Windows系统(Windows 3.0以前)中是很普遍的,事实上它也是唯一的。然而,随着显示器制造技术的进步,以及显示设备的多样化,DDB位图的一些固有的问题开始浮现出来了,象BitBlt()这种函数

心の点滴的专栏 3905

使用Wireshark抓取用户在网站的登陆密码

(POST请求是浏览器向服务器提交数据的方式,我们的用户名和密码就是这样提交出去的),单击点开,发现我们的账号和密码,就被抓取到了,在。(注意哦,要去掉http和/,比如http://www.4399.com/,我们只需要记下4399.com即可)(这句话是筛选数据,就是只显示IP为我们要抓取网站的数据) ,点击右边的蓝色箭头。这就是Wireshark简单的抓取登录密码的教程,只适用于http协议的网站。”打开,是这个样子,上面的数据先不用管,我们先点击左上角红色的方块停止抓包。,然后回车,得到的IP为。

泡泡的博客 1万+

抖音视频数据抓取

最近经常有人问我抓取抖音视频的数据,问我一些很小白的问题,算法给他也不会用。 还是先抓包,获取需要的接口和参数,相关的算法在其它文章里面有描述。 搜索个视频看看 查看抓的包信息: 可以看到,这里是post请求...

2501_91048859的博客 3097

设备相关位图DDB与设备无关位图DIB

设备相关位图   在Windows中有两种类型的位图:DDB位图(与设备相关位图)及DIB位图(与设备无关位图).与设备相关位图(DDB)是一种内部位图格式,它由MFC库6.0版本CBitmap类定义,有一个与之关联的Windows数据结构.   DDB中不包括颜色信息,显示时是以系统的调色板为基础进行各位的颜色映射.例如,如果当前的显示设备是256色模式,那么DDB必然也...

weixin_30932215的博客 346

windows中如何将已安装的nodejs高版本降级为低版本

第一步:先清空本地安装的node.js版本 1.按健win+R弹出窗口,键盘输入cmd,然后敲回车(或者鼠标直接点击电脑左面最左下角的win窗口图标弹出,输入cmd再点击回车键) 然后进入命令控制行窗口,并输入where node查看之前本地安装的node的路径 2.找到上面找到的路径,将node.exe所在的父目录里面的所有东西都删除 3.为了彻底删除之前安装的node.js,鼠标点击电脑左面最左下角的win窗口图标弹出,输入“控制面板”再点击回车键进入,进入控制面板后,找到所安装的node.js并

weixin_44582077的博客 9万+

DIB(Device-Independent Bitmap) 设备无关位图

位图一共有两种类型,即:设备相关位图(DDB)和设备无关位图(DIB)。DDB位图在早期的Windows系统(Windows 3.0以前)中是很普遍的,事实上它也是唯一的。然而,随着显示器制造技术的进步,以及显示设备的多样化,DDB位图的一些固有的问题开始浮现出来了,象BitBlt()这种函数就是基于DDB位图的。比如,它不能够存储(或者说获取)创建这张图片的原始设备的分辩率,这样,应用程序就不能

李昱成的专栏 2912

【目标检测】基于yolov5的水下垃圾检测(附代码和数据集,7684张图片)

【目标检测】基于yolov5的水下垃圾检测(附代码和数据集)

学无止境、积少成多、厚积薄发 4183

网络速度的极致:800G & 1.6T 以太网的突破!

你好,这里是网络技术联盟站。在我们进入数据驱动的世界时,以太网的重要性日益突出。从根本上说,以太网是一种连接计算机的技术,旨在形成一个本地网,通过它,设备可以与其他设备进行通信。然而,随着时间的推移,以太网已经发展成为一种全球的数据通信系统,其速度从初始的10Mbit/s发展到现在的800G,甚至1.6T。这种巨大的进步并不是没有挑战的,但每一次的突破都代表了技术的巨大飞跃。本文将探讨800G和1.6T以太网的创新与挑战。

网络技术联盟站 1769

《Visual C++ 数字图像处理典型算法及实现》学习记录

<br /><br />说来惭愧,我所在的是个图像处理课题组,可进组半年了,图像处理的理论知识还仅仅局限于王卫江老师的课。作业也一直是用Matlab做的。Matlab工具箱里的函数很全,直接调用很方便。可是速度不该恭维,尤其是做for循环,嵌个几层就基本龟速运行了。所以Matlab比较适合用来做一些对时效要求不高的工作,写论文仿真啥的。真正工程应用还得用VC++。正好刚装了正版的VS2008,拿来试试刀。<br /> <br />2011/02/21用CBitmap类打开一幅bmp图像。将一幅图像添加资源,

waylonzhai的专栏 3905

MIKE水动力笔记2_水动力基础理论知识

本文所讲内容是水动力基础理论知识,所参考的主要书籍是《水动力学和水质》(第二版,季振刚著,海洋出版社)。

晏长街的博客 1万+

C语言去除图像的离散区域,Visual C++数字图像实用工程案例精选

第1章数字图像处理技术11.1图像的常见格式11.1.1BMP文件格式21.BMP文件头22.BMP文件信息头33.BMP文件调色板44.BITMAP文件数据41.1.2Windows中位图格式41.DDB位图格式52.DIB位图格式51.1.3BMP文件的显示51.1.4实例——读取并显示BMP文件91.2V...

weixin_39917291的博客 406

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

图像处理-RGB24转YUV420遇到的坑以及执行效率对比

文章目录一、色彩空间简介及一些参考文档二、YUV和RGB转换公式三、RGB和YUV420转换提前需要了解的知识1.YUV420内存布局2.RGB内存布局3.转换方式四、源代码执行效率对比五、编译过程中遇到的问题 一、色彩空间简介及一些参考文档 不同的色彩空间,颜色的表现形式不同(见http://colorizer.org/ 这个网站中简单介绍了各个色彩空间的模型。)。色彩空间中的颜色是可以相互转化...

armwind的专栏 7484

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

camera模组拆解记录

今天在座位下面捡到一颗模组,想到做几年Camera,还没有拆过模组,这次就花点时间拆开看了一下。下图从左到右介绍 1.PCB板:由模组厂根据芯片封装Layout出PCB,然后将sensor ic焊接上去。这里本人特地看了一下连接处。不是传统的芯片IC,直接连接到PCB焊盘上,而是用细金属丝将芯片IC和PCB焊盘连接到一起的。百度看了一下,说这是金丝 2.底座 3.滤光片 4.镜头 5.VCM ...

armwind的专栏 6566

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

网络-本地回路的抓包工具RawCap

本地使用wireshark无法抓回路包,为此百度了一下RawCap可以抓回路包,亲测可用。特记录下来。 1.工具下载地址 https://www.netresec.com/?page=RawCap 2.工具使用界面 选择5,回路监听 输入保存文件的名称,回车,即可开始抓包 ctrl+c,结束抓包。 3. wireshark中使用 将文件从wireshark中打开 文件-&gt;打开, ...

armwind的专栏 4231

网络-RTSP简单理解

网络上有很多介绍RTSP的文章,但是看后还是印象不深刻,这里就记录一下读学习笔记吧。 1.协议介绍 RTSP协议以CS的方式工作,它是一个应用层的多媒体播放控制协议,用来使用户在播放从互联网下载的实时数据时能够对其进行控制,如暂停、继续、快进、快退等 RTSP的语法和操作与HTTP相似了,所有请求和响应都是基于ASCII文本。不同的是RTSP是有状态的协议,而HTTP是无状态的。RTSP记录客户端...

armwind的专栏 3911

ubuntu opencv开发环境配置介绍

一、源码包下载 源码包从链接:https://opencv.org/releases.html 下载 解压源码包 源码下载下来后是zip包,这里本人下载的是3.4.3的版本,则使用unzip opencv-3.4.3.zip 解压出来成下面样子。 源码包文件列表 armwind@armwind-X555LD:~/data/opencv/opencv-3.4.3$ tree -L 1 . . ├...

armwind的专栏 3067

ffmpeg学习之-window下编译安装nginx用ffmpeg推抓视频流

https://www.cnblogs.com/qfb620/p/5508468.html

armwind的专栏 2148

网络-TCP/UDP/IP体系结构和协议简介

发生大幅杀跌

armwind的专栏 1840

常用的视频接口

常用视频接口别人已经总结好了,直接拿过来吧 https://blog.youkuaiyun.com/ytffhew/article/details/83618007

armwind的专栏 1075

数字图像处理-5-图像处理的数学基础

本文介绍了数字图像处理中的微分运算方法。首先阐述了一阶差分(横向、纵向和双向)用于检测图像边缘,以及二阶差分和拉普拉斯算子用于检测灰度变化率的变化。详细推导了4邻域和8邻域拉普拉斯卷积核的数学原理,并比较了它们的特性。随后给出了Python实现代码,包括水平、垂直和双向一阶差分运算,以及基于卷积核的拉普拉斯运算方法。通过实际效果图展示了不同运算对边缘检测的效果差异,为图像边缘检测提供了理论基础和实现参考。

armwind的专栏 553

openISP学习7-CCM — Color Correction Matrix(色彩校正矩阵)

本文介绍了色彩校正矩阵(CCM)的原理与实现。CCM通过3×4矩阵变换将相机RGB转换至标准色彩空间,修正光谱响应差异。算法采用1024倍定点数(Q10格式)存储系数,包含3×3线性变换和3个偏移项。测试部分验证了三种场景:1)单位矩阵保持颜色不变;2)偏移项正确影响各通道;3)非对角项实现通道间色彩转换。实验通过构建特定测试图像,对比处理前后效果,直观展示了CCM对色彩的重映射作用。该实现逐像素计算,支持8位RGB输出,可用于相机图像处理流水线中的色彩校正环节。

armwind的专栏 518

ffmpeg学习之-初步认识及windows环境搭建

1.源码下载 http://www.ffmpeg.org/download.html 2. ffmpeg:FFmpeg全名是Fast Forward MPEG(Moving Picture Experts Group) 快速动态图像专家组.

armwind的专栏 462

数字图像处理-2-二值化,投影,灰度变换,直方图

本文介绍了基于Python实现的图像处理方法,包括二值化、灰度变换和灰度投影。二值化部分包含固定阈值法和双固定阈值法,可将图像转换为黑白两色。灰度变换部分介绍了窗口灰度变换和分段线性变换,用于调整图像动态范围。灰度投影则用于分析图像元素间隔,如文字识别中的行间距检测。所有方法均基于8位位图实现,未使用第三方图像处理库,代码简洁高效。

armwind的专栏 450
上一篇: 这6年的小感悟-重新记录自己
下一篇: 数字图像处理-2-二值化,投影,灰度变换,直方图
armwind
博客等级 码龄12年 406粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值