我是靠谱客的博主 怡然小甜瓜,这篇文章主要介绍笔记:OpenCV 【c++】图像操作,现在分享给大家,希望可以做个参考。

目录

读写图像

转灰度

对颜色取反(单通道(也就是为灰度图时))

多(3)通道


读写图像

imread 可以指定加载为灰度或者RGB图像

Mat src = imread("D:/opencv/2/a.jpg",IMREAD_GRAYSCALE);//把图片显示为灰度照片

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

    Mat output_image;
	cvtColor(src, output_image, COLOR_BGR2HLS);
	imwrite("D: / haha.jpg", output_image);

转灰度

/*方法1*/  
/*读取的时候采用灰度读取*/
        Mat gray_src= imread("D:/opencv/2/a.jpg",0);
      //Mat gray_src= imread("D:/opencv/2/a.jpg",IMREAD_GRAYSCALE);//把图片显示为灰度照片
  
  /*方法2*/
        Mat gray_src;
        cvtColor(src,gray_src,COLOR_BGR2GRAY);

对颜色取反(单通道(也就是为灰度图时))

/*方法1*/  
  //对颜色取反
       
        bitwise_not(src,dst);
        imshow("output",dst);
/*方法2*/  
     //下列for循环原理相同
      //获得其行列和通道数
        int rows = src.rows;
        int cols = src.cols;
        int channels = src.channels();
        for(int row=0;row<rows;row++)
        {
            for(int col=0;col<cols;col++)
            {
                int gray=src.at<uchar>(row,col);
                src.at<uchar>(row,col)=255-gray;
            }
        }
        imshow("output",src);

多(3)通道

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

 Mat gray_src;
        cvtColor(src, gray_src, COLOR_BGR2GRAY);
        for(int row=0;row<rows;row++)
        {
            for(int col=0;col<cols;col++)
            {
                int bgr[3];
                for(int i=0;i<3;i++)
                {
                    bgr[i]=src.at<Vec3b>(row,col)[i];
                }
                //同样是转灰度 这里是对每一个灰度图的每一个像素寻找其原图像bgr的最大最小值
                gray_src.at<uchar>(row,col)=max(bgr[0],max(bgr[1],bgr[2]));
                gray_src.at<uchar>(row,col)=min(bgr[0],min(bgr[1],bgr[2]));

            }
        }
        imshow("gray",gray_src);
     /*方法1*/     
            dst.create(src.size(),src.type());
            for(int row=0;row<rows;row++)
            {
                for(int col=0;col<cols;col++)
                {
                    int bgr[3];
                    for(int i=0;i<3;i++)
                    {
                        bgr[i]=src.at<Vec3b>(row,col)[i];
                           //对每个颜色取反处理
                        dst.at<Vec3b>(row,col)[i]=255-bgr[i];
                    }

                }
            }
            imshow("rgb",dst);

     /*方法2*/         
             Mat dst;
            //rgb取反处理
            bitwise_not(src, dst);
            imshow("rgb", dst);

最后

以上就是怡然小甜瓜最近收集整理的关于笔记:OpenCV 【c++】图像操作的全部内容,更多相关笔记:OpenCV内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(163)

评论列表共有 0 条评论

立即
投稿
返回
顶部