精华内容
下载资源
问答
  • 对于三通道的 RGB 位图来说,每个像素是一个 8-bit 整数的三元组。图像的像素操作是比较基础的图像算法,下面列举三个常用的像素操作算法。图像加法图像的加法表示两个输入图像同一位置上的像素相加,得到一个输出...
    
      
        

    图像可以是看成是一个多维的数组。读取一张图片,可以看成是读入了一系列的像素内容。这些像素内容,按照不同的模式具有不同的格式。对于三通道的 RGB 位图来说,每个像素是一个 8-bit 整数的三元组。图像的像素操作是比较基础的图像算法,下面列举三个常用的像素操作算法。

    图像加法

    图像的加法表示两个输入图像在同一位置上的像素相加,得到一个输出图像的过程。

    1.        imageProcessor = Operator.add(imageProcessor1,imageProcessor2);

    2.        if (imageProcessor!=null) {

    3.            CV4JImage resultCV4JImage = new CV4JImage(imageProcessor.getWidth(), imageProcessor.getHeight(), imageProcessor.getPixels());

    4.            result.setImageBitmap(resultCV4JImage.getProcessor().getImage().toBitmap());

    5.        }


    Operator的add表示矩阵加法,有一个要求两个图像必须大小一致。

    1.    public static ImageProcessor add(ImageProcessor image1, ImageProcessor image2) {

    2.        if(!checkParams(image1, image2)) {

    3.            return null;

    4.        }

    5.        int channels = image1.getChannels();

    6.        int w = image1.getWidth();

    7.        int h = image1.getHeight();

    8.        ImageProcessor dst = (channels == 3) ? new ColorProcessor(w, h) : new ByteProcessor(w, h);

    9.        int size = w*h;

    10.        int a=0, b=0;

    11.        int c=0;

    12.        for(int i=0; i<size; i++) {

    13.            for(int n=0; n<channels; n++) {

    14.                a = image1.toByte(n)[i]&0xff;

    15.                b = image2.toByte(n)[i]&0xff;

    16.                c = Tools.clamp(a + b);

    17.                dst.toByte(n)[i] = (byte)c;

    18.            }

    19.        }

    20.        return dst;

    21.    }

    在实际工作中,可以通过一张原图和一个mask图像来相加合成一些不规则的效果图片。

    像素混合

    在这里混合是线性混合,跟之前的图像加法有一定的区别。

    1.        imageProcessor = Operator.addWeight(imageProcessor1,2.0f,imageProcessor2,1.0f,4);

    2.        if (imageProcessor!=null) {

    3.            CV4JImage resultCV4JImage = new CV4JImage(imageProcessor.getWidth(), imageProcessor.getHeight(), imageProcessor.getPixels());

    4.            result.setImageBitmap(resultCV4JImage.getProcessor().getImage().toBitmap());

    5.        }


    Operator的addWeight方法表示像素混合。


    1.    public static ImageProcessor addWeight(ImageProcessor image1, float w1, ImageProcessor image2, float w2, int gamma) {

    2.        if(!checkParams(image1, image2)) {

    3.            return null;

    4.        }

    5.        int channels = image1.getChannels();

    6.        int w = image1.getWidth();

    7.        int h = image1.getHeight();

    8.        ImageProcessor dst = (channels == 3) ? new ColorProcessor(w, h) : new ByteProcessor(w, h);

    9.        int size = w*h;

    10.        int a=0, b=0;

    11.        int c=0;

    12.        for(int i=0; i<size; i++) {

    13.            for(int n=0; n<channels; n++) {

    14.                a = image1.toByte(n)[i]&0xff;

    15.                b = image2.toByte(n)[i]&0xff;

    16.                c = (int)(a*w1 + b*w2 + gamma);

    17.                dst.toByte(n)[i] = (byte)Tools.clamp(c);

    18.            }

    19.        }

    20.        return dst;

    21.    }

    提取图像中的ROI

    ROI(region of interest),表示图像中感兴趣的区域。对于一张图像,可能我们只对图像中某部分感兴趣,或者要对目标进行跟踪时,需要选取目标特征,所以要提取图像的感兴趣区域。

    1.        Resources res = getResources();

    2.        final Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.pixel_test_3);

    3.        image.setImageBitmap(bitmap);

    4.        CV4JImage cv4jImage = new CV4JImage(bitmap);

    5.        ImageProcessor imageProcessor = cv4jImage.getProcessor();

    6.        Rect rect = new Rect();

    7.        rect.x = 300;

    8.        rect.y = 200;

    9.        rect.width = 300;

    10.        rect.height = 450;

    11.        ImageProcessor resultImageProcessor = null;

    12.        try {

    13.            resultImageProcessor = Operator.subImage(imageProcessor,rect);

    14.        } catch (CV4JException e) {

    15.        }

    16.        if (resultImageProcessor!=null) {

    17.            CV4JImage resultCV4JImage = new CV4JImage(resultImageProcessor.getWidth(), resultImageProcessor.getHeight(), resultImageProcessor.getPixels());

    18.            result.setImageBitmap(resultCV4JImage.getProcessor().getImage().toBitmap());

    19.        }



    其中,rect.x和rect.y表示ROI的起始点,rect.width和rect.height表示ROI的宽和高。Operator的subImage()表示从原图中提取ROI,之所以在这里还用到了try catch,是为了防止出现ROI的宽度或者高度过大,从而导致数组越界。

    subImage方法的代码也很简单

    1.    /**

    2.     * ROI sub image by rect.x, rect.y, rect.width, rect.height

    3.     * @param image

    4.     * @param rect

    5.     * @return

    6.     * @throws CV4JException

    7.     */

    8.    public static ImageProcessor subImage(ImageProcessor image, Rect rect) throws CV4JException{

    9.        int channels = image.getChannels();

    10.        int w = rect.width;

    11.        int h = rect.height;

    12.        ImageProcessor dst = (channels == 3) ? new ColorProcessor(w, h) : new ByteProcessor(w, h);

    13.        int a=0;

    14.        int index = 0;

    15.        try {

    16.            for(int n=0; n<channels; n++) {

    17.                for(int row=rect.y; row < (rect.y+rect.height); row++) {

    18.                    for(int col=rect.x; col < (rect.x+rect.width); col++) {

    19.                        index = row*image.getWidth() + col;

    20.                        a = image.toByte(n)[index]&0xff;

    21.                        index = (row - rect.y)*w + (col - rect.x);

    22.                        dst.toByte(n)[index] = (byte)a;

    23.                    }

    24.                }

    25.            }

    26.        } catch (ArrayIndexOutOfBoundsException e) {

    27.            throw new CV4JException("数组越界了");

    28.        }

    29.        return dst;

    30.    }

    总结

    cv4j (https://github.com/imageprocessor/cv4j)是gloomyfish (http://blog.csdn.net/jia20003)和我一起开发的图像处理库,纯java实现,目前还处于早期的版本。

    像素操作是 cv4j 的基本功能之一,所有的像素操作算法都在Operator类中。除了本文介绍的三个算法之外,还有substract表示矩阵减法、multiple表示矩阵逐元素乘法、division表示矩阵逐元素除法以及bitwiseand、bitwisenot、bitwiseor、bitwisexor表示每个元素进行位运算分别是和、非、或、异或。

    如果您想看该系列先前的文章可以访问下面的文集:http://www.jianshu.com/nb/10401400


    关注【Java与Android技术栈】

    更多精彩内容请关注扫码


    展开全文
  • RGB彩色模式

    2020-01-19 21:47:12
    RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0-255范围内强度值。红、绿、蓝三盏灯叠加情况,中心三色最亮叠加区为白色,加法混合特点:越叠加越明亮。 红、绿、蓝三个颜色通道每种色各分为...

    RGB色彩模式


    RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0-255范围内的强度值。红、绿、蓝三盏灯的叠加情况,中心三色最亮的叠加区为白色,加法混合的特点:越叠加越明亮。
    红、绿、蓝三个颜色通道每种色各分为255阶亮度,在0时“灯”最弱–是关掉的,而在255时“灯”最亮。当三色数值相同时为无色彩的灰度色,而三色都为255时为最亮的白色,都为0时为黑色。电脑屏幕上的所有颜色,都有红色绿色蓝色三种色光按照不同的比例混合而成的。

    RGB彩色模式

    展开全文
  • PIL.Image.new(mode, size, color=0)model没有说明,作为前设计师自己补充一下 图像模式分别为 可直接PIL使用 ...但是它每个像素用8个bit表示,0表示黑,255表示白。下面我们将lena图像转...

    PIL.Image.new(mode, size, color=0)中model没有说明,作为前设计师自己补充一下

    图像模式分别为 可直接在PIL中使用

    1. 1,
    2. L,
    3. P,
    4. RGB,
    5. RGBA,
    6. CMYK,
    7. YCbCr,
    8. I,
    9. F

    一、模式“RGB”转换为其他不同模式

    1、模式“1”

    模式“1”为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。下面我们将lena图像转换为“1”图像。

    2、模式“L”

    模式L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:

    L = R * 299/1000 + G * 587/1000+ B * 114/1000
    

    3、模式“P”

    模式“P”为8位彩色图像,它的每个像素用8个bit表示,其对应的彩色值是按照调色板查询出来的。

    4、模式“RGBA”

    模式“RGBA”为32位彩色图像,它的每个像素用32个bit表示,其中24bit表示红色、绿色和蓝色三个通道,另外8bit表示alpha通道,即透明通道。

    alpha通道全部设置为255,即完全不透明。

    5、模式“CMYK”

    模式“CMYK”为32位彩色图像,它的每个像素用32个bit表示。模式“CMYK”就是印刷四分色模式,它是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。

    四种标准颜色是:C:Cyan = 青色,又称为‘天蓝色’或是‘湛蓝’M:Magenta = 品红色,又称为‘洋红色’;Y:Yellow = 黄色;K:Key Plate(blacK) = 定位套版色(黑色)。

    从实例中可以得知PIL中“RGB”转换为“CMYK”的公式如下:

    C = 255 - R
    M = 255 - G
    Y = 255 - B
    K = 0
    

    6、模式“YCbCr”

    模式“YCbCr”为24位彩色图像,它的每个像素用24个bit表示。YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。

    模式“RGB”转换为“YCbCr”的公式如下:

    Y= 0.257*R+0.504*G+0.098*B+16
    Cb = -0.148*R-0.291*G+0.439*B+128
    Cr = 0.439*R-0.368*G-0.071*B+128
    

    7、模式“I”

    模式“I”为32位整型灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“I”模式是按照下面的公式转换的:

    I = R * 299/1000 + G * 587/1000 + B * 114/1000
    

    模式“I”与模式“L”的结果是完全一样,只是模式“L”的像素是8bit,而模式“I”的像素是32bit。

    8、模式“F”

    模式“F”为32位浮点灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“F”模式是按照下面的公式转换的:

    F = R * 299/1000+ G * 587/1000 + B * 114/1000
    
    展开全文
  • 像素深度是指存储每个像素所用位数,RGB三个通道,一个通道存储8位,则三个通道共存储24位。 像素位深度决定了彩色图像的每个像素可能有颜色数,或者确定灰度图像的每个像素可能有灰度级数。 每个像素使用...

    像素深度是什么?

    像素深度是指存储每个像素所用的位数,RGB三个通道,一个通道存储8位,则三个通道共存储24位。

    像素位深度决定了彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数。

    每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就更准确。

    位深度为 1 的图像的像素有两个可能的值:黑色和白色。
    位深度为 8 的灰度模式图像有 256 个可能的灰色值。

    在arcgis中查询像素值
    可以用识别,(是什么样的影像,像素值就代表了对应的值,如DEM影像的像素值代表了高程,NDVI影像的像素值代表NDVI数值)

    查询像素值

    在envi中查询像素值步骤如下:
    查询像素值
    查询像素值
    该图为栅格数据,5087和4150代表行列号。

    在arcgis中提取像素值以及经纬度步骤:

    由于我采用的数据太大,所以对其进行了重采样,这样可以加快运行速度。我将栅格数据的分辨率改为了2000,也就是图像上一个栅格的大小代表了实地的2000米,采用的技术为双线性内插。

    重采样方法应用:当不同分辩率的影像数据之间进行运算时,需要将栅格大小统一到一个指定的分辩率上,此时就需要对栅格进行重采样。
    重采样

    1、arctoolbox-转换工具-栅格到点(为了将栅格数据转换为点数据,且生成的点位于栅格的中心)
    栅格转点
    Grid_code写的就是我们每个栅格数据,单个像元的DN值,gridcode这一列数据与值提取至点数据中的rastervalue这一列数据相同。
    栅格转点

    2、arctoolbox-提取工具-值提取至点(为了提取出点所在位置对应的栅格的像素值)

    值提取至点
    结果属性表

    注意:提取失败的原因可能是:
    (1)后台运行不稳定,改为前台运行,在地理处理菜单-地理处理选项-取消后台运行,也就是改为了前台运行。
    (2)换为多值提取至点,再次操作
    多值提取至点

    多值和值提取至点的介绍可以查询以下网站https://wenku.baidu.com/view/7fe9ad3858fafab068dc0248.html

    根据我目前的理解:
    多值提取至点,可以输入多个栅格数据或一个多波段的栅格数据,与对应的点数据相匹配,(自己可以命名提取的字段的名称,便于区分),则生成图的属性表中含有以上各栅格数据的像素值。
    比如,利用同一个地区的NDVI数据、DEM数据,则可以生成既含有NDVI字段、又含有高程字段的属性表。

    多值提取至点不会生成新的shapefile文件(值提取至点会生成),而是将想要提取的像素值赋给了点数据,在输入数据(点数据)的属性表中可以查询。

    3、在属性表中新建两个字段,一个放经度,一个放纬度,字段类型选择double(双精度)。
    添加经纬度字段
    计算经纬度:右键–计算几何,X Coor(x坐标)是经度,Y Coor(y坐标)是纬度。
    计算经度如下:
    计算经度
    计算纬度如下:
    计算纬度

    4、将属性表导出,在excel中进行处理

    属性表结果

    导出属性表
    提取x,y坐标的方法和以上一致,不过是将下面的单位(十进制度)改为米或千米,即可。
    提取x,y坐标

    展开全文
  • Modulo-Table-Visualizer 读入包含模表文件并生成有机对称图案。 概述 该程序采用模表并将数字转换为与其范围相关像素。 提供示例文件显示了模数表正确格式。... 重复每个像素 x^2 次以放大图像
  • RGB

    2019-10-02 03:16:59
    图像中每 像素 的RGB分量分配一0~255范围内强度值。RGB 图像 只使用三种颜色,就可以使它们按照不同比例混合, 屏幕 上呈现16777216(256 * 256 * 256)种颜色。 应用 [1...
  • 图像中的基本概念

    2018-03-09 12:41:04
    通道:把图像分解成一个或多个颜色成分 ①单通道:一个像素点只需一个数值表示,只能表示灰度,0为黑色 ②三通道:RGB模式,把图像分为红绿蓝三个通道,可以表示彩色,全0表示黑色 ③四通道:在RGB基础上加上...
  • 单通道图像每个像素点只用一个数值来表示,只可以表示灰度,0表示黑 三通道 : RGB模式,用红绿蓝来表示图像,可以表示彩色,全0表示黑色 四通道 在RGB的基础上加入了,alpha(透明度),alpha=0,表示全透明 3...
  • 接上一篇《Python图像处理库PIL中图像格式转换(一)》 二、其他不同模式转换为“RGB...模式RGB”为24位彩色图像,它的每个像素用24个bit表示,分别表示红色、绿色和蓝色三个通道。 PIL,对于彩色图像,ope...
  • 三、图像处理中的灰度化、二值化

    千次阅读 2018-08-30 18:41:20
    RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内强度值。RGB图像只使用三种颜色,R(red)、G(green)、B(blue),就可以使它们按照不同比例混合,屏幕上呈现16777216(256 * 256 * 256)种...
  • 图像处理库PIL有九种不同模式:1,L,P,RGB,RGBA... 模式“L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同灰度。  PIL,从模式RGB”转换为“L”模式是按照下面公式...
  • 使用每个像素RGB通道的最低有效位来存储消息 所得图像视觉上与原始图像相同 只能以非压缩格式(例如PNG)存储 DCT(离散余弦变换)模式 通过稍微改变频域中每个块的最低频率分量来存储信息 坚固的图像压缩能力,...
  • 图像中三通道通俗解释

    千次阅读 2019-10-03 04:31:03
    俗称灰度图,每个像素点只能有有一个值表示颜色,它像素值0到255之间,0是黑色,255是白色,中间值是一些不同等级灰色。(也有3通道灰度图,3通道灰度图只有一个通道有值,其他两个通道值都是零)。 (二...
  • RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内强度值。例如:纯红色R值为255,G值为0,B值为0;灰色R、G、B三个值相等(除了0和255);白色R、G、B都为255;黑色R、G、B都为0。RGB...
  • RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内强度值。RGB图像只使用三种颜色,就可以使它们按照不同比例混合,屏幕上重现16777216种颜色。 RGB 模式下,每种RGB 成分都可使用从 0...
  • RGB模型

    千次阅读 2010-10-28 20:48:00
    RGB是是从颜色发光原理来设计定RGB模型分成了三个颜色通道红(R)、绿(G)、蓝(B),RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内强度值。RGB图像只使用三种颜色,就可以使它们按照...
  • RGB模式的彩色图像在读入OPENCV进行处理时会按照行方向依次读取该RGB图像的B通道 G通道 R通道的像素点,并将像素点以行为单位存储ndarray的列 可以用image[0,0,0]访问图像image的B通道内第0行第0列上的像素点,...
  • RGB和CMYK

    2014-09-27 12:58:21
    RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内强度值。RGB图像只使用三种颜色,就可以使它们按照不同比例混合,屏幕上呈现16777216(256* 256 * 256)种颜色。 原理:RGB是从颜色...
  • OpenGL学习二十五:像素存储模式

    千次阅读 2014-01-21 22:33:24
    内存对齐: ...举例:图像每行按照4字节方式进行存储,如果图像宽度是5个像素RGB各占一个字节,那么行=5*3=15个字节,按照4字节方式存储行会浪费一个自己存储空间 如果行按照1字节方式存储
  • RGB转换HSI方法

    2010-01-27 22:37:24
    RGB色彩模式使用RGB模型为图像中每个像素的 RGB分量分配一个0~255范围内强度值。例如:纯红色R值为255,G值为0,B值为0;灰色R、G、B三个值相等(除了0和255);白色 R、G、B都为255;黑色R、G、B都为0。...
  • PIL图像处理

    2020-01-07 20:49:30
    一、基本概念介绍 通道 :每张图片由一个或者多个数据通道构成,PIL允许单张图片合成相同维数和深度多个通道。 以RGB图像为例,每...1 :1位像素,表示黑和白,但是存储时候每个像素存储为8bit. L : 8...

空空如也

空空如也

1 2 3 4 5
收藏数 95
精华内容 38
关键字:

在rgb模式的图像中每个像素