代码实现 |
功能:显示一张图片 |
#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; } |
【opencv图像处理】 05图像操作
猜你喜欢
转载自blog.csdn.net/fanjiule/article/details/81215944
今日推荐
周排行