当前位置:   article > 正文

openCV:基础功能_opencv src.col(loop).t();

opencv src.col(loop).t();

基础的一些功能 

创建与图像大小相同的图片
创建简单的3X3图像
创建数组
克隆图片
输出通道
获取像素高和宽
获取像素的值
掩膜操作提高对比度
图像和数组的初始化
创建单位矩阵 

单(3)通道图像灰度、反差转换(~)

  1. #include <iostream>
  2. #include<opencv2/opencv.hpp>
  3. using namespace std;
  4. using namespace cv;
  5. int main(int argc, char** argv)
  6. {
  7. Mat src;//初始化一个操作对象
  8. src = imread("C:/Users/JAY/Desktop/Others/tang.jpg");//读取图片
  9. if (!src.data)//判断图片是否加载进来
  10. {
  11. cout << "不能加载图片" << endl;
  12. return -1;
  13. }
  14. namedWindow("加载的图片", WINDOW_AUTOSIZE);//窗口命名,控制大小一致
  15. imshow("加载的图片", src);//输出图片,""内命名必须一致,才能显示在一个窗口
  16. //创建一个等大小、等类型的纯色图
  17. Mat drt0;
  18. drt0 = Mat(src.size(), src.type());//读取原始图片的尺寸和类型
  19. drt0 = Scalar(177, 0, 155);//定义RGB
  20. imshow("图片展示", drt0);
  21. //克隆图片
  22. Mat drt1 = src.clone();
  23. imshow("克隆的图片为", drt1);
  24. //输出灰度通道(单通道)
  25. Mat drt2;
  26. cvtColor(src, drt2, CV_BGR2GRAY);//将原始图片转换为灰度图
  27. cout << "加载的图片通道是:" << src.channels() << endl;//原始图为RGB,3通道
  28. cout << "输出的图片通道是:" << drt2.channels() << endl;//灰度图为单通道
  29. imshow("灰度图片为", drt2);
  30. int height = drt1.cols;//获取图像像素全部列
  31. int width = drt1.rows;//获取图像像素全部行
  32. cout << "行和列为:" << height << "\t" << width << endl;
  33. for (int row = 0; row < height; row++) //灰度操作
  34. {
  35. for (int col = 0; col < width; col++)
  36. {
  37. int gray = drt2.at<uchar>(row, col);
  38. drt2.at<uchar>(row, col) = 255 - gray;//反差操作
  39. }
  40. }
  41. imshow("单通道反差图片为", drt2);
  42. //3通道
  43. Mat drt3;
  44. drt3.create(src.size(), src.type());
  45. int height3 = src.cols;//获取图像像素全部列
  46. int width3 = src.rows;//获取图像像素全部行
  47. int nc = src.channels();//获取图片的通道数
  48. //bitwise_not(src, drt3);//3通道反差转换
  49. for (int row = 0; row < height3; row++) //灰度操作, for循环为bitwise_not(src, drt3)实现过程
  50. {
  51. for (int col = 0; col < width3; col++)
  52. {
  53. if (nc == 1)//如果是单通道图像
  54. {
  55. int gray = drt2.at<uchar>(row, col);
  56. drt2.at<uchar>(row, col) = 255 - gray;//反差操作
  57. }
  58. else if (nc == 3)//如果是3通道图像
  59. {
  60. int b = src.at<Vec3b>(row, col)[0];//Vec3b对应三通道的顺序是blue、green、red的uchar类型数据
  61. int g = src.at<Vec3b>(row, col)[1];
  62. int f = src.at<Vec3b>(row, col)[2];
  63. drt3.at<Vec3b>(row, col)[0] = 255 - b;//可以手动修改其值
  64. drt3.at<Vec3b>(row, col)[1] = 255 - g;
  65. drt3.at<Vec3b>(row, col)[2] = 255 - f;
  66. }
  67. }
  68. }
  69. imshow("3通道反差图片为", drt3);
  70. //输出像素值
  71. const uchar*firstRow = src.ptr<uchar>(0);//指针指向第0行
  72. cout << "第一个像素的灰度值为:" << *firstRow << endl;
  73. Mat M(3, 3, CV_8UC3, Scalar(0, 0, 255));//创建一个简单的3x3 RGB图像
  74. Mat M1(3, 3, CV_8UC1, Scalar(188));//创建一个简单的灰度图图像
  75. cout << "创建简单3x3图像RGB值为:" << "\n" << M << endl;//数组M输出每个像素的RGB值
  76. imshow("创建的简单灰度图像M1为:", M1);
  77. Mat srcc;//定义一个3X3的掩膜数组,提高原始图像对比度
  78. Mat C = (Mat_<double>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);//3x3的掩膜数组
  79. cout << "C = " << endl << " " << C << endl << endl;
  80. filter2D(src, srcc, -1, C);//对原始图片进行掩膜操作并输出
  81. imshow("掩膜操作对比度提高后图片为:", srcc);
  82. Mat M2 = Mat::zeros(src.size(), src.type());//图像初始化,像素都初始化为0
  83. imshow("进行初始化之后的图片为:", M2);
  84. Mat M3 = Mat::zeros(2, 2, CV_8UC1);//数组初始化
  85. cout << "进行初始化之后的数组为:" << "\n" << M3 << endl;
  86. Mat M4 = Mat::eye(4, 4, CV_8UC1);//数组初始化,生成单元数组
  87. cout << "进行初始化之后的单元数组为:" << "\n" << M4 << endl;
  88. waitKey(0);
  89. return 0;
  90. }

对应的结果

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/649661
推荐阅读
相关标签
  

闽ICP备14008679号