赞
踩
基础的一些功能
创建与图像大小相同的图片
创建简单的3X3图像
创建数组
克隆图片
输出通道
获取像素高和宽
获取像素的值
掩膜操作提高对比度
图像和数组的初始化
创建单位矩阵
单(3)通道图像灰度、反差转换(~)
- #include <iostream>
- #include<opencv2/opencv.hpp>
- using namespace std;
- using namespace cv;
-
- int main(int argc, char** argv)
- {
- Mat src;//初始化一个操作对象
- src = imread("C:/Users/JAY/Desktop/Others/tang.jpg");//读取图片
- if (!src.data)//判断图片是否加载进来
- {
- cout << "不能加载图片" << endl;
- return -1;
- }
- namedWindow("加载的图片", WINDOW_AUTOSIZE);//窗口命名,控制大小一致
- imshow("加载的图片", src);//输出图片,""内命名必须一致,才能显示在一个窗口
-
- //创建一个等大小、等类型的纯色图
- Mat drt0;
- drt0 = Mat(src.size(), src.type());//读取原始图片的尺寸和类型
- drt0 = Scalar(177, 0, 155);//定义RGB
- imshow("图片展示", drt0);
-
- //克隆图片
- Mat drt1 = src.clone();
- imshow("克隆的图片为", drt1);
-
- //输出灰度通道(单通道)
- Mat drt2;
- cvtColor(src, drt2, CV_BGR2GRAY);//将原始图片转换为灰度图
- cout << "加载的图片通道是:" << src.channels() << endl;//原始图为RGB,3通道
- cout << "输出的图片通道是:" << drt2.channels() << endl;//灰度图为单通道
- imshow("灰度图片为", drt2);
-
- int height = drt1.cols;//获取图像像素全部列
- int width = drt1.rows;//获取图像像素全部行
- cout << "行和列为:" << height << "\t" << width << endl;
- for (int row = 0; row < height; row++) //灰度操作
- {
- for (int col = 0; col < width; col++)
- {
- int gray = drt2.at<uchar>(row, col);
- drt2.at<uchar>(row, col) = 255 - gray;//反差操作
- }
- }
- imshow("单通道反差图片为", drt2);
-
- //3通道
- Mat drt3;
- drt3.create(src.size(), src.type());
- int height3 = src.cols;//获取图像像素全部列
- int width3 = src.rows;//获取图像像素全部行
- int nc = src.channels();//获取图片的通道数
- //bitwise_not(src, drt3);//3通道反差转换
- for (int row = 0; row < height3; row++) //灰度操作, for循环为bitwise_not(src, drt3)实现过程
- {
- for (int col = 0; col < width3; col++)
- {
- if (nc == 1)//如果是单通道图像
- {
- int gray = drt2.at<uchar>(row, col);
- drt2.at<uchar>(row, col) = 255 - gray;//反差操作
- }
- else if (nc == 3)//如果是3通道图像
- {
- int b = src.at<Vec3b>(row, col)[0];//Vec3b对应三通道的顺序是blue、green、red的uchar类型数据
- int g = src.at<Vec3b>(row, col)[1];
- int f = src.at<Vec3b>(row, col)[2];
- drt3.at<Vec3b>(row, col)[0] = 255 - b;//可以手动修改其值
- drt3.at<Vec3b>(row, col)[1] = 255 - g;
- drt3.at<Vec3b>(row, col)[2] = 255 - f;
- }
- }
- }
- imshow("3通道反差图片为", drt3);
-
- //输出像素值
- const uchar*firstRow = src.ptr<uchar>(0);//指针指向第0行
- cout << "第一个像素的灰度值为:" << *firstRow << endl;
-
- Mat M(3, 3, CV_8UC3, Scalar(0, 0, 255));//创建一个简单的3x3 RGB图像
- Mat M1(3, 3, CV_8UC1, Scalar(188));//创建一个简单的灰度图图像
- cout << "创建简单3x3图像RGB值为:" << "\n" << M << endl;//数组M输出每个像素的RGB值
- imshow("创建的简单灰度图像M1为:", M1);
-
- Mat srcc;//定义一个3X3的掩膜数组,提高原始图像对比度
- Mat C = (Mat_<double>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);//3x3的掩膜数组
- cout << "C = " << endl << " " << C << endl << endl;
- filter2D(src, srcc, -1, C);//对原始图片进行掩膜操作并输出
- imshow("掩膜操作对比度提高后图片为:", srcc);
-
- Mat M2 = Mat::zeros(src.size(), src.type());//图像初始化,像素都初始化为0
- imshow("进行初始化之后的图片为:", M2);
- Mat M3 = Mat::zeros(2, 2, CV_8UC1);//数组初始化
- cout << "进行初始化之后的数组为:" << "\n" << M3 << endl;
- Mat M4 = Mat::eye(4, 4, CV_8UC1);//数组初始化,生成单元数组
- cout << "进行初始化之后的单元数组为:" << "\n" << M4 << endl;
-
- waitKey(0);
- return 0;
- }

对应的结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。