zoukankan      html  css  js  c++  java
  • 图像处理---《读写图像、读写像素、修改像素值----反色处理》

    图像处理---《读写图像、读写像素、修改像素值---反色处理》

    学习:利用读写图像、读写像素、修改像素值,实现一个图像反色处理例子

    读写图像

    (1)imread 可以指定加载为灰度或者RGB图像。

    (2)Imwrite 保存图像文件,类型由扩展名决定。

     

    读写像素

    (1)读一个GRAY像素点的像素值(CV_8UC1)

    Scalar intensity = img.at<uchar>(y, x);

    或者 Scalar intensity = img.at<uchar>(Point(x, y));

     

    (2)读一个RGB像素点的像素值

    Vec3f intensity = img.at<Vec3f>(y, x);

    float blue = intensity.val[0];

    float green = intensity.val[1];

    float red = intensity.val[2];

     

    修改像素值

    (1)灰度图像

    img.at<uchar>(y, x) = 128;

     

    (2)RGB三通道图像

    img.at<Vec3b>(y,x)[0]=128; // blue

    img.at<Vec3b>(y,x)[1]=128; // green

    img.at<Vec3b>(y,x)[2]=128; // red

     

    (3)空白图像赋值

    img = Scalar(0);

     

    (4)ROI选择

    Rect r(10, 10, 100, 100);

    Mat smallImg = img(r);

     

    Vec3bVec3F

    Vec3b对应三通道的顺序是blue、green、red的uchar类型数据。

    Vec3f对应三通道的float类型数据

    把CV_8UC1转换到CV32F1实现如下:

    src.convertTo(dst, CV_32F);

    /***************************************************************************************
    作者:@WP20190612
    环境:VS2010 + OpenCV2.4.3
    功能:利用读写图像、读写像素、修改像素值--->实现 自己写一个图像反色处理函数 的例子
    ***************************************************************************************/
    //-------------------------------功能:自己写一个图像反色处理函数------------------------------
    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    using namespace cv;
    using namespace std;
    
    int main (int argc, char** argv)  //argumentss 参数;argc命令行参数个数;
    {
        Mat src;
        src = imread("D:\003_test_img\test001.png");
        if (src.empty())
        {
            cout << "could not load image ...
    " << endl;
            return -1;   //return 0 成功完成本函数;return -1 未能完成本函数
        }
        namedWindow("input image", CV_WINDOW_AUTOSIZE);
        imshow("input image", src);
        
        //---------------------------开始 进行功能处理---------------------------------------
    
        /*//**************************处理单通道的*******************************
        Mat gray_src;
        cvtColor(src, gray_src, CV_BGR2GRAY);
        namedWindow("output", CV_WINDOW_AUTOSIZE);
        imshow("output",gray_src);
        
        //图像的宽、高
        int height = gray_src.rows;
        int width  = gray_src.cols;
    
        //图像进行反色处理---单通道
        for (int row=0; row<height; row++)
        {
            for (int col=0; col<width; col++)
            {
                int gray=gray_src.at<uchar>(row, col);
                gray_src.at<uchar>(row, col)=255-gray;
            }
        }
    
        //显示处理后的图像
        namedWindow("gray_invert", CV_WINDOW_AUTOSIZE);
        imshow("gray_invert", gray_src);
        //**************************处理单通道的********************************/
    
        //**************************处理多通道************************************
        Mat gray_src, dst;
        dst.create(src.size(), src.type());
        int height = src.rows;
        int width  = src.cols;
        int nc=src.channels();
    
        for (int row=0; row<height; row++)
        {
            for(int col=0; col<width; col++)
            {
                if (nc==1)
                {
                    int gray = gray_src.at<uchar>(row, col);
                    gray_src.at<uchar>(row, col)=255-gray;
                }
                else if (nc==3)
                {
                    int b=src.at<Vec3b>(row, col)[0];
                    int g=src.at<Vec3b>(row, col)[1];
                    int r=src.at<Vec3b>(row, col)[2];
                    dst.at<Vec3b>(row, col)[0]=255-b;
                    dst.at<Vec3b>(row, col)[1]=255-g;
                    dst.at<Vec3b>(row, col)[2]=255-r;
                }
            }
        }
        namedWindow("gray_3channels_invert", CV_WINDOW_AUTOSIZE);
        imshow("gray_3channels_invert", dst);
        //****************************处理多通道************************************
        //----------------------------结束处理图像---------------------------------------
    
        waitKey(0); //防止DOS一闪而过
        return 0;
    }

    /***************************************************************************************
    作者:@WP20190612
    环境:VS2010 + OpenCV2.4.3
    功能:opencv自带的图像反色处理函数
    ***************************************************************************************/
    //-------------------------------功能:opencv自带的bitwise_not()反色处理函数------------------------------
    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    using namespace cv;
    using namespace std;
    
    int main (int argc, char** argv)  //argumentss 参数;argc命令行参数个数;
    {
        Mat src;
        src = imread("D:\003_test_img\test001.png");
        if (src.empty())
        {
            cout << "could not load image ...
    " << endl;
            return -1;   //return 0 成功完成本函数;return -1 未能完成本函数
        }
        namedWindow("input image", CV_WINDOW_AUTOSIZE);
        imshow("input image", src);
        
        //---------------------------开始 进行功能处理---------------------------------------
    
        /*//**************************处理单通道的*******************************
        Mat gray_src;
        cvtColor(src, gray_src, CV_BGR2GRAY);
        namedWindow("output", CV_WINDOW_AUTOSIZE);
        imshow("output",gray_src);
        
        //图像的宽、高
        int height = gray_src.rows;
        int width  = gray_src.cols;
    
        //图像进行反色处理---单通道
        for (int row=0; row<height; row++)
        {
            for (int col=0; col<width; col++)
            {
                int gray=gray_src.at<uchar>(row, col);
                gray_src.at<uchar>(row, col)=255-gray;
            }
        }
    
        //显示处理后的图像
        namedWindow("gray_invert", CV_WINDOW_AUTOSIZE);
        imshow("gray_invert", gray_src);
        //**************************处理单通道的********************************/
    
        //**************************处理多通道************************************
        Mat gray_src, dst;
        dst.create(src.size(), src.type());
        int height = src.rows;
        int width  = src.cols;
        int nc=src.channels();
    
        /*for (int row=0; row<height; row++)
        {
            for(int col=0; col<width; col++)
            {
                if (nc==1)
                {
                    int gray = gray_src.at<uchar>(row, col);
                    gray_src.at<uchar>(row, col)=255-gray;
                }
                else if (nc==3)
                {
                    int b=src.at<Vec3b>(row, col)[0];
                    int g=src.at<Vec3b>(row, col)[1];
                    int r=src.at<Vec3b>(row, col)[2];
                    dst.at<Vec3b>(row, col)[0]=255-b;
                    dst.at<Vec3b>(row, col)[1]=255-g;
                    dst.at<Vec3b>(row, col)[2]=255-r;
                }
            }
        }*/
    
        //OpenCV自带的颜色 反处理函数
        bitwise_not(src, dst);  //反位操作函数
    
        namedWindow("gray_3channels_invert", CV_WINDOW_AUTOSIZE);
        imshow("gray_3channels_invert", dst);
        //****************************处理多通道************************************
        //----------------------------结束处理图像---------------------------------------
    
        waitKey(0); //防止DOS一闪而过
        return 0;
    }

     

  • 相关阅读:
    redhat7最小化安装后的简单配置
    weblogic线程优化
    weblogic运行自动挂掉,优化jvm解决
    weblogic抛出Platform MBeanServer异常
    rehat7/contos7 HA安装配置
    docker stats 命令源码分析
    cAdvisor源码分析
    转: django class base view 简单说明
    转:多用户、多工作负载、5000节点集群:Kubernetes 1.6都有哪些看点?
    第一篇随笔
  • 原文地址:https://www.cnblogs.com/carle-09/p/11028233.html
Copyright © 2011-2022 走看看