我是靠谱客的博主 怡然小甜瓜,最近开发中收集的这篇文章主要介绍笔记: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 【c++】图像操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部