【opencv图像处理】 05图像操作

代码实现

功能:显示一张图片

#include <opencv2/opencv.hpp>

#include <iostream>

using namespace std;

using namespace cv;

/***************************************

功能:显示一张图片

***************************************/

int main()

{

扫描二维码关注公众号,回复: 2742190 查看本文章

     Mat src;

     src = imread("C:/daima practice/opencv/mat1/mat1/image.jpg");

     if (!src.data) {

           printf("could not load image...\n");

           return -1;

     }

     namedWindow("输入原图", CV_WINDOW_AUTOSIZE);//新建一个窗口,"输入原图"是窗口名字,自己可以随便定义

     imshow("输入原图", src);

     

     waitKey(0);//启动按键监听,按下按键后扩展台退出

     return 0;

}

通过(cvtColor)将图片转为灰度

#include <opencv2/opencv.hpp>

#include <iostream>

using namespace std;

using namespace cv;

/***************************************

功能:显示一张图片的灰度图

***************************************/

int main()

{

     Mat src;

     src = imread("C:/daima practice/opencv/mat1/mat1/image4.jpg");//这里是图片路径,图片要放入工程。注意复制路径时是'\'。我们要改为'/'。不然图片识别不出来。

     if (!src.data) {

           printf("could not load image...\n");

           return -1;

     }

     namedWindow("输入原图", CV_WINDOW_AUTOSIZE);//新建一个窗口,"输入原图"是窗口名字,自己可以随便定义

     imshow("输入原图", src);

     Mat gray_src; //声明一个Mat类型的gray_src

     cvtColor(src,gray_src,CV_BGR2GRAY);//将src转换为灰度图存储在gray_src里面。

     namedWindow("灰度图",CV_WINDOW_AUTOSIZE);//新建一个窗口,显示灰度图

     imshow("灰度图",gray_src);//输出灰度图

     

     waitKey(0);//启动按键监听,按下按键后扩展台退出

     return 0;

}

功能:将一张灰度图片色彩像素反转(单通道)

#include <opencv2/opencv.hpp>

#include <iostream>

using namespace std;

using namespace cv;

/***************************************

功能:将一张图片色彩像素反转

***************************************/

int main()

{

///////////显示原图

     Mat src;

     src = imread("C:/daima practice/opencv/mat1/mat1/image4.jpg");//这里是图片路径,图片要放入工程。注意复制路径时是'\'。我们要改为'/'。不然图片识别不出来。

     if (!src.data) {

           printf("could not load image...\n");

           return -1;

     }

     namedWindow("输入原图", CV_WINDOW_AUTOSIZE);//新建一个窗口,"输入原图"是窗口名字,自己可以随便定义

     imshow("输入原图", src);

///////////显示灰度图 

     Mat gray_src; //声明一个Mat类型的gray_src

     cvtColor(src,gray_src,CV_BGR2GRAY);//将src转换为灰度图存储在gray_src里面。

     namedWindow("灰度图",CV_WINDOW_AUTOSIZE);//新建一个窗口,显示灰度图

     imshow("灰度图",gray_src);//输出灰度图

     

///////计算该图的高宽,并把像素读取出来

     int height = gray_src.rows;//求高

     int width = gray_src.cols;//求宽

///////针对gray_src单通道类型图片

     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;   //将图片像素反转

           }    

     }

     imshow("反转后的图片",gray_src);//显示反转后的图片

     waitKey(0);//启动按键监听,按下按键后扩展台退出

     return 0;

}

循环彩色图片反转(多通道)

/////方法1,循环读取图片元素

     for (int row = 0;row < height;row++)

     {

           for (int col = 0;col < width;col++)

           {

                if(nc == 1)//通道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;

                }

           }

     }

     imshow("循环彩色图片反转",dst);//显示反转后的图片

循环彩色图片反转(多通道)【快速方法】

////方法2,函数读取图像元素,牛逼呀一句话!!! 

     bitwise_not(src,dst);//将src色彩转换后存入dst

     imshow("函数彩色图片反转",dst);//显示反转后的图片

给图片加滤镜

#include <opencv2/opencv.hpp>

#include <iostream>

using namespace cv;

using namespace std;

int main(int argc, char** argv)

{

///////显示一张图片

     Mat src;

     src = imread("C:/daima practice/opencv/mat1/mat1/image3.jpg");

     if (!src.data)

     {

           printf("could not load image...\n");

           return -1;

     }

     namedWindow("输入原图", CV_WINDOW_AUTOSIZE);

     imshow("输入原图", src);

     int nc = src.channels();//定义通道数nc

////////修改通道数值,改变图片效果

     Mat dst;//用来存储新的图片

     dst.create(src.size(),src.type());//设置dst与src同大小

     int height = src.rows;//计算src的高,宽

     int width = src.cols;

////////多通道色彩读取

     for (int row = 0;row < height;row++)

     {

           for (int col = 0;col < width;col++)

           {    

                      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] = b;//第一次尝试改为0

                      dst.at<Vec3b>(row,col)[1] = g;//第二次尝试改为0

                      dst.at<Vec3b>(row,col)[2] = r;//第三次尝试改为0,改变b,g,r的值,效果不一样。

                      //gray_src.at<uchar>(row,col) = max(r,max(b,g));//取最小值,也可以显示灰度图。     

           }

     }

     imshow("美化后的图片",dst);

     

     waitKey(0);

     return 0;

}

(通过更改像素值)灰度图的显示

#include <opencv2/opencv.hpp>

#include <iostream>

using namespace cv;

using namespace std;

int main(int argc, char** argv)

{

///////显示一张图片

     Mat src;

     src = imread("C:/daima practice/opencv/mat1/mat1/image3.jpg");

     if (!src.data)

     {

           printf("could not load image...\n");

           return -1;

     }

     namedWindow("输入原图", CV_WINDOW_AUTOSIZE);

     imshow("输入原图", src);

     int nc = src.channels();//定义通道数nc

////////修改通道数值,改变图片效果

     Mat dst;//用来存储新的图片

     dst.create(src.size(),src.type());//设置dst与src同大小

     int height = src.rows;//计算src的高,宽

     int width = src.cols;

////////多通道色彩读取

     for (int row = 0;row < height;row++)

     {

           for (int col = 0;col < width;col++)

           {    

                      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] = max(r,max(b,g));//表示在b,g,r中去最大值。结果显示灰度图。

                      dst.at<Vec3b>(row,col)[1] = max(r,max(b,g));

                      dst.at<Vec3b>(row,col)[2] = max(r,max(b,g));

                      //注意:如果上面改为min(r,min(b,g))取最小值,也是灰度图显示。

           }

     }

     imshow("美化后的图片",dst);

     

     waitKey(0);

     return 0;

}

猜你喜欢

转载自blog.csdn.net/fanjiule/article/details/81215944