zoukankan      html  css  js  c++  java
  • 1. 灰度化转换

    一、灰度化处理

    1.  RGB颜色模型
                 一种加色模型,将红(Red)、绿(Green)、蓝(Blue)三原色的色光以不同的比例相加,以产生多种多样的色光,且三原色的红绿蓝不可能用其他单色光合成。
         RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内的强度值。RGB图像仅仅使用三种颜色,R(red)、G(green)、B(blue),就能够使它们依照
         不同的比例混合,在屏幕上呈      现 16777216(256 * 256 * 256)种颜色。
       

    2. 灰度化

                 在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。0%的灰   度RGB数值是255,255,255;1%灰度的RGB数值是253,253,253;2%灰度RGB值为250,250,250。
                灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度
    3. 灰度化算法
         

     二、灰度化算法实现

    //分量法
     Mat RGB2GrayFromChannels(Mat img)
    {
         vector<Mat>chanels;
         split(img, chanels);
         Mat r = chanels.at(0);
         Mat g = chanels.at(1);
         Mat b = chanels.at(2);
         return g;
    }
     //平均值
     Mat RGB2GrayFromAverage(Mat img)
     {
         int height = img.rows;
         int width = img.cols;
         Mat out = Mat::zeros(height, width, CV_8UC1);
         for (int i = 0; i < height; i++)
         {
             for (int j = 0; j < width; j++)
             {
                 out.at<uchar>(i, j) = (img.at<Vec3b>(i, j)[0] + img.at<Vec3b>(i, j)[1] + img.at<Vec3b>(i, j)[2]) / 3;
             }
         }
         return out;
     }
    
     //加权平均
     Mat RGB2GrayFromJiaQuan(Mat img)
     {
         int height = img.rows;
         int width = img.cols;
         Mat out = Mat::zeros(height, width, CV_8UC1);
         float a = 0.299;
         float b = 0.578;
         float c = 0.114;
         for (int i = 0; i < height; i++)
         {
             for (int j = 0; j < width; j++)
             {
                 out.at<uchar>(i, j) = a*img.at<Vec3b>(i, j)[0] + b*img.at<Vec3b>(i, j)[1] + c*img.at<Vec3b>(i, j)[2];
             }
         }
         return out;
     }
    %分量法
    %三个通道
    gray_image_R = I(:,:,1);
    gray_image_G = I(:,:,2);
    gray_image_B = I(:,:,3);
    figure(1);
    subplot(1,3,1);
    imshow(gray_image_R);
    title("gray_image_R");
    subplot(1,3,2);
    imshow(gray_image_G);
    title("gray_image_G");
    subplot(1,3,3);
    imshow(gray_image_B);
    title("gray_image_B");
    %平均值法
    avergray = zeros(m,n/3);
    for i = 1:1:m
        for j = 1:1:n/3
            avergray(i,j) = (gray_image_R(i,j)+gray_image_G(i,j)+gray_image_B(i,j))/3;
        end
    end
    figure(3);
    avergray = uint8(avergray);
    imshow(avergray);
    %加权平均值法
    gray = zeros(m,n/3);
    for i = 1:1:m
        for j = 1:1:n/3
            gray(i,j) = 0.299*gray_image_R(i,j)+0.578*gray_image_G(i,j)+0.114*gray_image_B(i,j);
        end
    end
    figure(4);
    gray = uint8(gray);
    imshow(gray);
     
  • 相关阅读:
    SpringBoot接口文件findBy方法写错导致抛出IllegalArgumentException
    用tomcat启动spring-boot
    Idea使用tool window中的persistence功能一键生成数据库实体
    Idea 启动 tomcat 报错
    详细梳理ajax跨域4种解决方案
    他们权利意识强,但是也会为生活牺牲很多
    每月碎碎念 | 2019.09
    说好不哭 我不会走
    css实现内容不相同的左右两个div等高
    简单了解css3轮廓outline
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/13234622.html
Copyright © 2011-2022 走看看