精华内容
下载资源
问答
  • 图像数据量计算

    千次阅读 2020-06-14 10:20:16
    如:一幅画的尺寸是1024*768,深度为16,则它的数据量为1.5M。 计算如下:   1024×768×16 bit = (1024×768×16)/8 Byte = [(1024×768×16)/8]/1024 KB = 1536 KB = {[(1024×768×16)/8]/1024}/1024 MB = 1.5 ...

    图像深度 是指存储每个像素所用的位数,也用于量度图像的色彩分辨率。

    图像深度 确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数。它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级。比如一幅单色图像,若每个像素有8位,则最大灰度数目为2的8次方,即256。一幅彩色图像RGB三通道的像素位数分别为4,4,2,则最大颜色数目为2的4+4+2次方,即1024,就是说像素的深度为10位,每个像素可以是1024种颜色中的一种

    计算如下:
      1024×768×16 bit = (1024×768×16)/8 Byte = [(1024×768×16)/8]/1024 KB = 1536 KB = {[(1024×768×16)/8]/1024}/1024 MB = 1.5 MB
    ————————————————
    版权声明:本文为CSDN博主「donkey_1993」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/donkey_1993/article/details/80781773

    展开全文
  • 图像处理过程中,通常以MATLAB代码进行模拟,

        在图像处理过程中,通常以MATLAB代码进行实验,然而在具体的应用中,由于效率和可移植性等各种问题,几乎不可避免的要将图像处理用c甚至于汇编来实现。下面介绍在c或者c++环境下图像处理模板的搭建程序代码。本程序代码只针对于bmp图像数据区进行操作,可方便的移植到嵌入式等开发环境。本程序关于读入bmp部分代码属于网友分享代码资源。

        在vs开发环境下新建win32空项目,添加.cpp文件,将下面代码复制到该文件中,修改读入图像和输出图像路径后编译即可。

    #include <string.h>   
    #include <math.h>     
    #include <stdio.h>     
    #include <stdlib.h>     
    #include <malloc.h>  
      
    #include<time.h>//时间相关头文件,可用其中函数计算图像处理速度  
      
    #define   WIDTHBYTES(bits) (((bits)+31)/32*4)//用于使图像宽度所占字节数为4byte的倍数  
      
    typedef unsigned char  BYTE;  
    typedef unsigned short WORD;  
    typedef unsigned long  DWORD;  
    typedef long LONG;  
      
    //位图文件头信息结构定义  
    //其中不包含文件类型信息(由于结构体的内存结构决定,要是加了的话将不能正确读取文件信息)  
      
    typedef struct tagBITMAPFILEHEADER {  
    DWORD  bfSize;          //文件大小  
    WORD   bfReserved1;     //保留字,不考虑  
    WORD   bfReserved2;     //保留字,同上  
    DWORD  bfOffBits;       //实际位图数据的偏移字节数,即前三个部分长度之和  
    } BITMAPFILEHEADER;   
      
    //信息头BITMAPINFOHEADER,也是一个结构,其定义如下:  
      
    typedef struct tagBITMAPINFOHEADER{  
    //public:  
    DWORD   biSize;             //指定此结构体的长度,为40  
    LONG    biWidth;            //位图宽  
    LONG    biHeight;           //位图高  
    WORD    biPlanes;           //平面数,为1  
    WORD    biBitCount;         //采用颜色位数,可以是1,2,4,8,16,24,新的可以是32  
    DWORD   biCompression;      //压缩方式,可以是0,1,2,其中0表示不压缩  
    DWORD   biSizeImage;        //实际位图数据占用的字节数  
    LONG    biXPelsPerMeter;    //X方向分辨率  
    LONG    biYPelsPerMeter;    //Y方向分辨率  
    DWORD   biClrUsed;          //使用的颜色数,如果为0,则表示默认值(2^颜色位数)  
    DWORD   biClrImportant;     //重要颜色数,如果为0,则表示所有颜色都是重要的  
    } BITMAPINFOHEADER;   
    
    void main()
    {
    	long now=0;
    	now=clock();//存储图像处理开始时间
    
    	BITMAPFILEHEADER bitHead;
    	BITMAPINFOHEADER bitInfoHead; 
    	FILE* pfile;
    	FILE* wfile;
    
    	char strFile[50]="E:\\testpicture\\1.bmp";//打开图像路径,需修改为自己图像存储的路径
    	char strFilesave[50]="E:\\testpicture\\2.bmp";//处理后图像存储路径,需修改为自己图像存储的路径
    	pfile = fopen(strFile,"rb");//文件打开图像
    	wfile = fopen(strFilesave,"wb");//打开文件为存储修改后图像做准备
    
    	//读取位图文件头信息
    	WORD fileType;
    	fread(&fileType,1,sizeof(WORD),pfile);
    	fwrite(&fileType,1,sizeof(WORD),wfile);
    	if(fileType != 0x4d42)
    	{
    		printf("file is not .bmp file!");
    		return;
    	}
    	fread(&bitHead,1,sizeof(tagBITMAPFILEHEADER),pfile);
    	fwrite(&bitHead,1,sizeof(tagBITMAPFILEHEADER),wfile);//写回位图文件头信息到输出文件  
    
    	//读取位图信息头信息
    	fread(&bitInfoHead,1,sizeof(BITMAPINFOHEADER),pfile);
    	fwrite(&bitInfoHead,1,sizeof(BITMAPINFOHEADER),wfile);//写回位图信息头信息到输出文件  
    
    	int width = bitInfoHead.biWidth;
    	int height = bitInfoHead.biHeight;
    	//分配内存空间把源图存入内存   
    	int l_width = WIDTHBYTES(width* bitInfoHead.biBitCount);//计算位图的实际宽度并确保它为4byte的倍数 
    
    	BYTE    *pColorData=(BYTE *)malloc(height*l_width);//开辟内存空间存储图像数据
    	memset(pColorData,0,height*l_width);   
    
    	BYTE    *pColorDataMid=(BYTE *)malloc(height*l_width);//开辟内存空间存储图像处理之后数据
    	memset(pColorDataMid,0,height*l_width); 
    
    	long nData = height*l_width;
    
    	//把位图数据信息读到数组里   
    	fread(pColorData,1,nData,pfile);//图像处理可通过操作这部分数据加以实现,可将下面的示例修改为中值滤波等各种图像处理模块
    									//在嵌入式开发环境下,大多数情况下已经得到图像数据区,是故将下面部分代码稍作修改就可以移植到嵌入式端
    
    	/*******************图像处理部分******************/
    		/*******************示例,将图像亮度减半******************/
    		for(int hnum=0;hnum<height;hnum++)
    			for(int wnum=0;wnum<width;wnum++)
    			{
    				int pixel_point=hnum*l_width+wnum*3;//数组位置偏移量,对应于图像的各像素点RGB的起点  
    				pColorDataMid[pixel_point]=pColorData[pixel_point]*0.5;
    				pColorDataMid[pixel_point+1]=pColorData[pixel_point+1]*0.5;
    				pColorDataMid[pixel_point+2]=pColorData[pixel_point+2]*0.5;
    			}
    		/*******************示例,将图像亮度减半******************/
    	/*******************亮度控制******************/
    
    	fwrite(pColorDataMid,1,nData,wfile);//将处理完图像数据写回文件
    	fclose(pfile);
    	fclose(wfile);
    
    	printf("图像处理完成\n");
    	printf("运行时间为:%dms\n",clock()-now);//输出图像处理花费时间信息
    }
    




    展开全文
  • vb.net中彩色图像数据的快速获取

    千次阅读 2014-02-18 11:26:50
    一直以来,图像处理都是VB的禁区,主要的原因可能是因为她没有指针,而图像数据量通常都很大。其实,只要有正确的方法,VB同样可以写出高效而又快速的图像处理程序的。  我并不是学图像处理这方面的。可以说,...

     一直以来,图像处理都是VB的禁区,主要的原因可能是因为她没有指针,而图像的数据量通常都很大。其实,只要有正确的方法,VB同样可以写出高效而又快速的图像处理程序的。

            我并不是学图像处理这方面的。可以说,我的专业和图像毫不占边,但因老板项目的需要,自学了一些图形图像学方面的知识。网络上图像方面大部分的代码都是用VC写的,对于我这个对C系列语言不感冒的人来说实在是太痛苦了,好在关键的算法部分还能够马马乎乎的看懂,这样在学习中也改写了不少代码,这里想共享一些常用的算法供大家研究。

           要处理一个图像,首先当然要获得该图像的像素值,常见很多人直接用两个循环中调用GetPixel 来得到数据(最初我也是),这个过程是相当耗时,在处理完毕后又调用SetPixel 来更新图像,而SetPixel呢,要进行坐标系转化、剪裁区域判断、将颜色匹配为设备支持的最接近的,最后还要根据不同的颜色格式寻址、为将颜色写入其所在位进行位运算,速度可想而知了。

           在VB6.0,为了快速得到一副图像的数据,通常需要调用API函数GetDIBits,而在调用该函数前要做大量的准备工作(API声明、BITMAPINFO信息设置等),也有点烦躁,但在.net中提供了BitmapData类,再结合Marshal类的Copy方法可以快速地复制图像数据到一维数组中。

            因为我的项目中只对彩色图像进行处理,而且不涉及到特效,所以没有考虑到Alpha通道。

           以下是图像的读取和保存部分的代码:


        '  ******************************************************************************************
        '
        '  函数名   :  ReadBitmap
        '  功能     :  读取图像数据
        '  参数     :  Bmp          ------     Bitmap       待处理位图
        '               BmpData      ------     Byte         保存图像的数据的数组(引用)
        '  作者     :  laviewpbt
        '  时间     :  2005-5-20  9:45
        '  修改者   : 
        '  修改时间 :
        '
        '  ******************************************************************************************


        Public Shared Sub ReadBitmap(ByVal Bmp As Bitmap, ByRef BmpData() As Byte)
            Dim Data As BitmapData = Bmp.LockBits(New Rectangle(0, 0, Bmp.Width, Bmp.Height),                 ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb)     '  将Bitmap对象锁定到系统内存中
            Dim Stride As Integer = Data.Stride       '   扫描宽度
            Dim Scan0 As IntPtr = Data.Scan0        '   位图中第一个像素数据的地址
            Dim Number As Integer = Bmp.Height * Stride - 1    ' 图像数据元素的个数,注意.net中数组下标是从0开始的
            ReDim BmpData(Number)   
            Marshal.Copy(Scan0, BmpData, 0, Number)   ‘将内存Scan0后面Number字节的数据拷贝到BmpData中
            Bmp.UnlockBits(Data)   ' 从系统内存解锁Bitmap
       End Sub

     

     
      '  ******************************************************************************************
        '
        '  函数名   :  WriteBitmap
        '  功能     :  将数据写入图像
        '  参数     :  Bmp          ------     Bitmap       待处理位图
        '               BmpData      ------     Byte         保存图像的数据的数组
        '  作者     :  laviewpbt
        '  时间     :  2005-5-20  9:49
        '  修改者   : 
        '  修改时间 :
        '
        '  ******************************************************************************************

        Public Shared Sub WriteBitmap(ByVal Bmp As Bitmap, ByVal BmpData() As Byte)
            Dim Data As BitmapData = Bmp.LockBits(New Rectangle(0, 0, Bmp.Width, Bmp.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb)   '  '  将Bitmap对象锁定到系统内存中
            Dim stride As Integer = Data.Stride       '    扫描宽度
            Dim Scan0 As IntPtr = Data.Scan0         '   位图中第一个像素数据的地址
            Dim Number As Integer = Bmp.Height * stride - 1      ' 图像数据元素的个数
            Marshal.Copy(BmpData, 0, Scan0, Number)     '将BmpData中的数据拷贝到Scan0后面的Number字节中
            Bmp.UnlockBits(Data)     ' 从系统内存解锁Bitmap
        End Sub

           Marshal.Copy方法的使用大大加速了数据的获取,Marshal类还提供了ReadByte,WriteByte之类的方法,但利用这种方的效率也将非常低下。

            对于一副1024*768的24位真彩色图像,利用上述函数读取数据所用的时间是0豪秒(呵呵,当然不是了,估计要用QueryPerformanceCounter函数来得到这个值,顺便说下我的机器配置:256MB内存,Pentium 3.0G),也就是说,图像数据获取可以达到毫秒级,这样,我们就可以把大部分设计的精力投入到算法的设计中去。

            上面所获取的数据是一维数组,而24真彩色图像用一三维BmpData(width-1,height-1,2)数组来表示是相当便于处理的,但是如何快速的把数据写入到一三维数组中,我还没有发现好办法,Marshal.Copy方法只支持一维数组的数据复制,如果用For循环来做,也是一个很漫长的过程。我曾经试着用CopyMemory ,虽然可以将内存中一段数据拷贝到一多维数组中,但数组中的数据的顺序不符合要求。

           不过说明一点,同样的数据计算量,用一维数组要比用多维数据的速度要快些,这是很明显的,所以经过一番思想斗争,我决定还是用一维数组来处理,虽然在计算中有些难以理解计算式的意义。

      

    展开全文
  • 文章目录数字图像处理——第六章 彩色图像处理1 彩色模型1.1 RGB彩色模型1.2 CMY 和CMYK彩色模型1.3 HSI彩色模型2 伪彩色图像处理2.1 灰度分层2.2 灰度到彩色的变换3 彩色图像的分割3.1 RGB中的彩色图像分割3.2 彩色...

    数字图像处理——第六章 彩色图像处理

    1 彩色模型

    1.1 RGB彩色模型

    RGB模型是工业界的一种颜色标准. 是通过对红(Red)、绿(Green)、蓝(Blue)3种颜色亮度的变化以及它们相互之间的叠加来得到各种各样的颜色。RGB彩色空间对应的坐标系统是如图所示的立方体
    在这里插入图片描述

    其实在绪论中就有说过彩色图像的相关知识,复习亿下。

    像素:数字图像由二维的元素组成,每一个元素具有一个特定的位置(x,y)和幅值f(x,y),这些元素就称为像素,它是数字图像的基本单位。

    彩色图像:用红、绿、蓝三元组的二维矩阵来表示。三元组的每个数值也是在0-255之间,0表示相应的基色在该像素中没有,而255表示相应的基色在该像素中取得最大值,所以越接近0越黑,越接近255越白。

    利用python提取出RGB三通道图像:

    在这里插入图片描述

    代码如下:

    import cv2
    import numpy as np 
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    img = cv2.imread('  ')
    plt.figure(dpi = 180)
    
    plt.subplot(141)
    plt.imshow(img)
    plt.title("原图")
    plt.subplot(142)
    plt.imshow(img[:, :, 0])
    plt.title("B")
    
    plt.subplot(143)
    plt.imshow(img[:, :, 1])
    plt.title("G")
    
    plt.subplot(144)
    plt.imshow(img[:, :, 2])
    plt.title("R")
    plt.tight_layout()
    plt.show()
    

    实验结论:首先有个小问题,可以看出原图和真正的原图长得不一样, 这是因为我读取的方式采用的是opencv,而show采用的是matplotlib,这两者接口的模式不一致。opencv 的接口使用BGR模式,而 matplotlib.pyplot 接口使用的是RGB模式。所以上述原图长得不像原图。解决方法,从opencv读取后转成RGB格式 img = img[:, :, [2, 1, 0]]即可,如下所示

    在这里插入图片描述

    只需要在上述代码中读取img之后,加入 img = img[:, :, [2, 1, 0]]即可。

    1.2 CMY 和CMYK彩色模型

    CMY是青(Cyan)、洋红或品红(Magenta)和黄(Yellow)三种颜色的简写,是相减混色模式,用这种方法产生的颜色之所以称为相减色,乃是因为它减少了为视觉系统识别颜色所需要的反射光。和RGB的区别在于:RGB是红(Red)、绿(Green)和蓝(Blue)三种颜色的简写,是相加混色模式,每种颜色分量越多,得到的颜色越亮,每种颜色的取值范围为0~255;RGB常用于计算机显示方面
    由于彩色墨水和颜料的化学特性,用三种基本色得到的黑色不是纯黑色,因此在印刷术中,常常加一种真正的黑色(black ink),这种模型称为CMYK模型,广泛应用于印刷术。每种颜色分量的取值范围为0~100;CMY常用于纸张彩色打印方面

    CMY和RGB其实是互补的颜色类型。
    [CMY]=[111][RGB] \left[\begin{array}{c} C \\ M \\ Y \end{array}\right]=\left[\begin{array}{l} 1 \\ 1 \\ 1 \end{array}\right]-\left[\begin{array}{l} R \\ G \\ B \end{array}\right]
    以上假设所有的颜色全部归一化到了[0,1]之间,C M Y 主要表示颜料的表面所反射的颜色,上式表明涂有青色颜料的表面所反射的光中不包含红色,类似的,纯深红色不反射绿色,纯黄色不反射蓝色。所以CMY其实就是RGB的补色。
    因为CMY所组合的颜色不是纯黑,所以为了产生真正的黑色,我们一般在模型里面加入CMYK的k即代表黑色。

    1.3 HSI彩色模型

    色调H(Hue):与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等。
    饱和度S(Saturation):表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。饱和度越大,颜色看起来就会越鲜艳,反之亦然。
    亮度I(Intensity):对应成像亮度和图像灰度,是颜色的明亮程度。

    HSI是指一个数字图像的模型,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和亮度三种基本特征量来感知颜色。HSI模型的建立基于两个重要的事实:
    第一个,分量与图像的彩色信息无关;
    第二个,H和S分量与人感受颜色的方式是紧密相联的。这些特点使得HSI模型非常适合彩色特性检测与分析。

    从RGB空间到HSI空间的转换,即分别求出HSI参数
    在这里插入图片描述

    在这里插入图片描述

    代码如下

    def RGB2HSI(rgb_img):
        """
        传入RGB乳香,返回HSI图像
        """
        #保存原始图像的行列数
        row = np.shape(rgb_img)[0]
        col = np.shape(rgb_img)[1]
        #对原始图像进行复制
        hsi_img = rgb_img.copy()
        #对图像进行通道拆分
        B,G,R = cv2.split(rgb_img)
        #把通道归一化到[0,1]
        [B,G,R] = [ i/ 255.0 for i in ([B,G,R])]
        H = np.zeros((row, col))    #定义H通道
        I = (R + G + B) / 3.0       #计算I通道
        S = np.zeros((row,col))      #定义S通道
        for i in range(row):
            den = np.sqrt((R[i]-G[i])**2+(R[i]-B[i])*(G[i]-B[i]))
            thetha = np.arccos(0.5*(R[i]-B[i]+R[i]-G[i])/den)   #计算夹角
            h = np.zeros(col)               #定义临时数组
            #den>0且G>=B的元素h赋值为thetha
            h[B[i]<=G[i]] = thetha[B[i]<=G[i]]
            #den>0且G<=B的元素h赋值为thetha
            h[G[i]<B[i]] = 2*np.pi-thetha[G[i]<B[i]]
            #den<0的元素h赋值为0
            h[den == 0] = 0
            H[i] = h/(2*np.pi)      #弧度化后赋值给H通道
        #计算S通道
        for i in range(row):
            min = []
            #找出每组RGB值的最小值
            for j in range(col):
                arr = [B[i][j],G[i][j],R[i][j]]
                min.append(np.min(arr))
            min = np.array(min)
            #计算S通道
            S[i] = 1 - min*3/(R[i]+B[i]+G[i])
            #I为0的值直接赋值0
            S[i][R[i]+B[i]+G[i] == 0] = 0
        #扩充到255以方便显示,一般H分量在[0,2pi]之间,S和I在[0,1]之间
        hsi_img[:,:,0] = H*255
        hsi_img[:,:,1] = S*255
        hsi_img[:,:,2] = I*255
        return hsi_img
    

    2 伪彩色图像处理

    2.1 灰度分层

    伪彩色图像处理也叫假彩色图像处理,根据一定的准则对灰度值赋以彩色的处理

    灰度级分层通常用于突出感兴趣的特定灰度范围内的亮度。灰度级分层有两大基本方法。

    • 将感兴趣的灰度范围内的值显示为一个值(比如0),而其他范围的值为另外一个值(255)。
    • 将感兴趣的灰度范围内的值显示为一个值(比如0),而其他范围的值不变。

    在这里插入图片描述

    代码如下:

    import cv2
    import numpy as np 
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    def grayscale_layer(input_image, spotlight_range_min, spotlight_range_max, means):
        '''
        灰度级分层
        :param input_image: 原图像
        :param spotlight_range_min: 所突出的灰度级范围最小值
        :param spotlight_range_max: 所突出的灰度级范围最大值
        :param means: 分层方式(1,2)
        :return: 灰度级分层后的图像
        '''
        input_image_cp = np.copy(input_image) # 输入图像的副本
    
        if means == 1: # 方式一(突出指定范围内255,并且变暗非范围内0)
            input_image_cp = np.where((input_image_cp >= spotlight_range_min) & (input_image_cp <= spotlight_range_max), 255, 0)
        elif means == 2: # 方式二(仅突出指定范围内255)
            input_image_cp[np.where((input_image_cp >= spotlight_range_min) & (input_image_cp <= spotlight_range_max))] = 255
        else:
            print("please enter the number of means from 1 to 2")
            return
        
        output_image = input_image_cp
        
        return output_image.astypetype(np.uint8)
    
    img = cv2.imread('  ')
    img = img[:, :, [2, 1, 0]]
    plt.figure(dpi = 180)
    
    plt.subplot(131)
    plt.imshow(img)
    plt.title("原图")
    
    plt.subplot(132)
    plt.imshow(output_1)
    plt.title("output_1")
    
    plt.subplot(133)
    plt.imshow(output_2)
    plt.title("output_2")
    
    plt.tight_layout()
    plt.show()
    

    2.2 灰度到彩色的变换

    首先我们需要一张灰度图,读取灰度图的方式有好几种,这里用opencv读取灰度图,然后用matplotlib显示。读取方式为:

    img = cv2.imread('  ', 0) # 0代表着以灰度图的方式读取
    

    但是直接使用plt显示图像,它默认使用三通道显示图像。所以你管这绿的叫灰度图?所以在plt.imshow()添加参数,plt.imshow(img, cmap=“gray”),这样就能得到正经的灰度图。

    在这里插入图片描述

    opencv中自带函数cv2.applyColorMap(img, cv2.COLORMAP_JET)能将灰度图像转化成伪彩色图像,效果如下:

    在这里插入图片描述

    import cv2
    import numpy as np 
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    img = cv2.imread('C:/Users/yujunliu/Pictures/Saved Pictures/dongman.jpg', 0)
    img = img[:, :, [2, 1, 0]]
    im_color = cv2.applyColorMap(img, cv2.COLORMAP_JET)
    
    plt.figure(dpi = 100)
    
    plt.subplot(121)
    plt.imshow(img, cmap = "gray")
    plt.title("灰度图")
    
    plt.subplot(122)
    plt.imshow(im_color)
    plt.title("伪彩色图像")
    
    
    plt.tight_layout()
    plt.show()
    

    3 彩色图像的分割

    彩色空间分割是基于单色图像(灰度图)分割技术在不同颜色通道上实现的。灰度图分割技术常见的有:直方图阀值化、特征聚类、边缘检测、基于区域的、模糊技术、神经网络等。灰度图的分割方法都是基于区域像素的非连续性或相似性。基于非连续性的方法主要是为了检测孤立的点、边缘、线(灰度突然变化的地方)。基于相似性的方法包括阀值、聚类、区域分割合并等。

    3.1 RGB中的彩色图像分割

    本次目标是将一副图像从rgb颜色空间转换到hsv颜色空间,颜色去除白色背景部分具体就调用了cv2的两个函数,一个是rgb转hsv的函数,另一个是利用cv2.inRange函数设阈值,去除背景部分。

    在这里插入图片描述

    代码如下:

    import cv2
    import numpy as np 
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    def color_seperate(image):
            hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)   #对目标图像进行色彩空间转换
            #设定蓝色下限
            lower_hsv = np.array([20, 20, 20])          
            #设定蓝色上限
            upper_hsv = np.array([255, 255, 255])        
            mask = cv2.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)  
            dst = cv2.bitwise_and(image, image, mask=mask)    
            return dst
            
    img = cv2.imread('  ')
    out = color_seperate(img)
    plt.figure(dpi = 100)
    
    plt.subplot(121)
    plt.imshow(img)
    plt.title("原图")
    
    plt.subplot(122)
    plt.imshow(out)
    plt.title("output")
    
    
    plt.tight_layout()
    plt.show()
    

    核心函数在于cv2.inRange,参数有三个
    第一个参数:原图

    第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0

    第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0

    而在lower_red~upper_red之间的值变成255

    3.2 彩色边缘检测

    在图像识别中,需要有边缘鲜明的图像,即图像锐化。图像锐化的目的是为了突出图像的边缘信息,加强图像的轮廓特征,以便于人眼的观察和机器识别。图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。本次利用Canny算子来实现边缘检测。图像边缘检测必须满足两个条件,一能有效地抑制噪声;二必须尽量精确确定边缘的位置。根据对信噪比与定位乘积进行测度,得到最优化逼近算子,这就是Canny边缘检测算子。

    Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:

    • 最好的检测: 算法能够尽可能多地标识出图像中的实际边缘。

    • 最好的定位: 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。

    • 最小的响应:图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。

    这里采用opencv C++版本调用摄像头实现Candy算子:

    img

    代码如下:

    #include <opencv2\opencv.hpp>  
    #include<opencv2/imgproc/imgproc.hpp>
    using namespace cv;
    
    int main()
    {
    	VideoCapture capture(0);
    	while (1)
    	{
    		Mat frame; 
    		Mat dstImage, edge, grayImage;  //参数定义
    		capture >> frame; 
    		//将原图像转换为灰度图像
    		cvtColor(frame, grayImage, CV_BGR2GRAY);
    		//先用使用 3x3内核来降噪
    		blur(grayImage, edge, Size(3, 3));
    		//运行Canny算子
    		Canny(edge, edge, 3, 9, 3);
    		imshow("读取视频", edge); 
    		waitKey(30);
    	}
    	return 0;
    }
    
    展开全文
  • 彩色图像基础

    千次阅读 2008-06-05 15:20:00
    彩色图像基础1.彩色的基本概念彩色是创建图像的基础,在计算机上使用彩色没有什么特殊之处,只不过是它有一套特定的记录和处理彩色的技术。因此,要理解图像处理软件中所出现的各种有关彩色的术语,首先要具备...
  • 介绍一组自主研发的免费的ActiveX控件,涉及如下领域: 科学数值计算,数字信号处理,图形图像,数据挖掘与数据视觉化,虚拟仪器等领域.来自下列网站: ChengBo Software Workshop  http://www.chengbosoft.com -------...
  • 一般彩色图像至少需要三个维度的信息,比如RGB、HSV等等。而彩色模型又分为,面向硬设备的彩色模型和面向视觉感知的彩色模型。 面向硬设备的彩色模型(适合在输出显示场合使用): RGB彩色模型; CMY彩色模型;...
  • 彩色图像基础 彩色空间(也称彩色模型或彩色系统) 彩色空间转换 伪彩色图像处理 强度分层技术 灰度级到彩色的转换 全彩色图像处理基础 彩色变换 彩色图像平滑 彩色图像尖锐化(拉普拉斯微分) 彩色分割...
  • 数字图像处理《6、彩色图像处理》

    千次阅读 2017-06-13 11:15:59
    图像中引用彩色的原因 (1)简化区分目标; (2)人眼可辨别上千种颜色...描述彩色光的3个基本: 辐射率(radiance):从光源流出能量的总量,用瓦特度量(W); 光强(luminace):观察者从光源接收的能量总...
  • 数字图像处理与Python实现笔记之彩色图像处理初步摘要绪论2 彩色图像处理初步2.1 彩色图像的颜色空间2.1.1 RGB颜色空间2.1.2 HSI颜色空间2.1.3 RGB和HSI颜色空间的转换2.2 伪彩色图像处理2.2.1 强度分层2.2.2 ...
  • 第5章 彩色数字图像基础

    千次阅读 2007-09-18 15:24:00
    但是,图像数字化之后的数据量非常大,在因特网上传输时很费时间,在盘上存储时很占“地盘”,因此就必须要对图像数据进行压缩。压缩的目的就是要满足存储容量和传输带宽的要求,而付出的代价是大量的计算。几十年来...
  • 数字图像处理第六章——彩色图像处理(上)

    千次阅读 多人点赞 2019-04-23 22:24:29
    数字图像处理第六章数字图像处理---彩色图像处理(一) 在 MATLAB 中彩色图像的表示(二)仿射变换(三)投影变换(四)应用于图像的几何变换(五)MATLAB 中的图像坐标系统5.1 输出图像位置5.2 控制输出网格(六)...
  • 第六章 彩色图像处理

    千次阅读 2017-06-26 22:52:00
    MATLAB中图像的表示 ...彩色图像处理的基础知识 彩色图像的空间滤波 彩色图像平滑 HSI亮度分量平滑 彩色图像锐化 直接在RGB向量空间的处理 使用梯度进行色彩边缘检测 在RGB向量空间中进行图像分割
  • 二值图像 二值图像(Binary Image),按名字来理解只有两个值,0和1,0代表黑,1代表白,或者说0表示背景,而1表示前景。其保存也相对简单,每个像素只需要1bit就可以完整存储信息。即图像上的每一个像素点的像素值...
  • 二值图像、灰度图像彩色图像

    万次阅读 多人点赞 2018-03-31 12:53:17
    ____tz_zs二值图像二值图像(Binary Image),按名字来理解只有两个值,0和1,0代表黑,1代表白,或者说0表示背景,而1表示前景。其保存也相对简单,每个像素只需要1Bit就可以完整存储信息。如果把每个像素看成随机...
  • 数字图像处理(一)之彩色图像修复

    千次阅读 2019-11-06 23:06:31
    为完成本次实验,你需要从原始图像文件中分割提取三个彩色通道图像,将它们对齐并彼此叠加在一起,最终形成一张RGB彩色图像。美国国会图书馆在其网站上详细说明了他们对这批照片进行复原并创建彩色图像的过程,大家...
  • 图像数据结构

    千次阅读 2019-11-19 20:29:04
    矩阵用于描述图像,可以表示黑白图像、灰度图像彩色图像。 矩阵中的一个元素表示图像的一个像素。矩阵描述黑白图像时,矩阵中的元素取值只有0和1两个值,因此黑白图像又叫二值图像或二进制图像。矩阵描述灰度图像...
  • 四、彩色图像处理基础 五、彩色图像处理 六、彩色图像的噪声 七、彩色图像的压缩 附加知识点 一、彩色基础 彩色定义:彩色是物体的一种属性,他依赖于一下三个方面的因素。 (1)光源——照射光的谱性质或谱...
  • 历经一个多月,CSDN貌似终于好像把文章列表阅读信息归零BUG给修好了,于是乎放篇做期末大作业时写的文章上来测测效果,可别又像上次一样一发文章就又坑爹了啊! 本篇谈的是图像的旋转,不算是什么新鲜的题目了。...
  • 数字图像处理 第6章 彩色图像处理

    千次阅读 2018-06-28 16:43:41
    索引图像:有两个分量: 整数数据矩阵 X 和彩色映射矩阵 map “抖动” :是印刷和出版行业常用的一种处理手段, 在由点组成的印刷页上给出色调变化的直观印象。以损失空间分辨率为代价, 从而达到更好的颜...
  • 图像彩色空间

    万次阅读 2015-11-12 21:56:31
    RGB颜色空间 在计算机技术中使用最广泛的颜色空间是RGB颜色空间,它是一种与人的...对一幅三通道彩色数字图像C,对每个图像像素(x,y),需要指出三个矢量分量R、G、B; RGB对应到显示器的三个刺激值,组成三维正
  • 而它的使用方法也很簡單,只要告訴他要轉換的點的數(uPointNum)、把要轉換的點用陣列的形式傳(const  XnPoint3D *)進去,並給他一塊已經 allocate 好的  XnPoint3D  陣列(p3DPointSet),就可以自動進行...
  • 直方图均衡化这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方...
  • 多分辨率下的彩色图像分割方法

    千次阅读 2013-05-13 21:45:34
    目前,对于灰度图像的分割,已经有相当多的成果和结论,而对彩色图像的分割,由于比较复杂、运算大,研究还比较少。彩色图像通常情况下比灰度图像包含更多的信息,更接近人的视觉感受,因此,对彩色图像分割的研究...
  • 对上一篇博客《图像处理模板---针对bmp图像数据区的操作和输出处理完成图像》
  • 彩色图像的二值化,取经之旅第 6 天

    万次阅读 多人点赞 2020-12-29 21:14:00
    图像的二值化,虽然不知道未来可以干啥,不过看起来很厉害的样子
  • [导读] “大数据时代”,数据为王!无论是数据挖掘还是目前大热的深度学习领域都离不开“大数据”。大公司们一般会有自己的数据,但对于创业公司或是高校老师、学生来说,“Where can I get large datasets open ...
  • 图像深度,计算图像所占内存大小

    千次阅读 2016-09-25 11:14:10
    图像深度确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数.它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级。比如一幅单色图像,若每个像素有8位 ,则最大...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,285
精华内容 9,314
关键字:

彩色数据图像的数据量计算