• 图像处理---《读写图像、读写像素、修改像素值----灰度处理》


    图像处理---《读写图像、读写像素、修改像素值----灰度处理》

     

    /***************************************************************************************
    作者:@WP20190612
    环境:VS2010 + OpenCV2.4.3
    功能:获取图像的灰度图,方式:
          (1)cvtColor()
          (2)gray_src.at<uchar>(row, col)=min(b,min(g,r));
          (3)gray_src.at<uchar>(row, col)=max(b,max(g,r));
    ***************************************************************************************/
    //-------------------------------功能:制作 灰度图像------------------------------
    #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_gray_src", CV_WINDOW_AUTOSIZE);
        imshow("output_gray_src",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 dst;
        //cvtColor(src, gray_src, CV_BGR2GRAY);
        dst.create(src.size(), src.type());
    
        height = src.rows;
        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;
                    dst.at<Vec3b>(row, col)[0]=b;
                    dst.at<Vec3b>(row, col)[1]=g;
                    dst.at<Vec3b>(row, col)[2]=r;
    
                    //其它方式的取灰度
                    //gray_src.at<uchar>(row, col)=min(b,min(g,r));
                    gray_src.at<uchar>(row, col)=max(b,max(g,r));
                }
            }
        }
    
        namedWindow("output_gray_max", CV_WINDOW_AUTOSIZE);
        imshow("output_gray_max", gray_src);
        //****************************处理多通道************************************
        //----------------------------结束处理图像---------------------------------------
    
        waitKey(0); //防止DOS一闪而过
        return 0;
    }

  • 相关阅读:
    WEB安全 php+mysql5注入防御(一)
    Spring 整合 Quartz 实现动态定时任务(附demo)
    dubbo工作原理(3)
    dubbo服务降级(2)
    dubbo服务降级(1)
    程序员决对不能缺少产品思维
    GNUPG
    idea远程debug:tomcat
    基于JavaMail的Java邮件发送:复杂邮件发送
    使用javaMail发送简单邮件
  • 原文地址:https://www.cnblogs.com/carle-09/p/11037851.html
Copyright © 2020-2023  润新知