经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
基于Qt OpenCV的图像灰度化像素操作详解
来源:jb51  时间:2022/7/4 14:09:47  对本文有异议

效果图

实现代码

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3.  
  4. #include <QWidget>
  5. #include<opencv2/opencv.hpp>
  6. using namespace cv;
  7. QT_BEGIN_NAMESPACE
  8. namespace Ui { class Widget; }
  9. QT_END_NAMESPACE
  10.  
  11. class Widget : public QWidget
  12. {
  13. Q_OBJECT
  14.  
  15. public:
  16. Widget(QWidget *parent = nullptr);
  17. ~Widget();
  18. private slots:
  19. void TheMax(Mat Input_iamge);
  20. void TheMean(Mat Input_iamge);
  21. void TheMeightedMean(Mat Input_iamge);
  22. void UI_init();
  23. private:
  24. Ui::Widget *ui;
  25. };
  26. #endif // WIDGET_H
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3.  
  4. Widget::Widget(QWidget *parent)
  5. : QWidget(parent)
  6. , ui(new Ui::Widget)
  7. {
  8. ui->setupUi(this);
  9. UI_init(); //init ui
  10.  
  11. Mat image_1=imread("D:/program/Qt/Qt5+opencv/108homework/me.png");
  12. ui->image1->setPixmap(QPixmap("D:/program/Qt/Qt5+opencv/108homework/me.png"));
  13.  
  14. TheMax(image_1);
  15. ui->image2->setPixmap(QPixmap("D:/program/Qt/Qt5+opencv/108homework/image_2.png"));
  16.  
  17. TheMean(image_1);
  18. ui->image3->setPixmap(QPixmap("D:/program/Qt/Qt5+opencv/108homework/image_3.png"));
  19.  
  20. TheMeightedMean(image_1);
  21. ui->image4->setPixmap(QPixmap("D:/program/Qt/Qt5+opencv/108homework/image_4.png"));
  22. }
  23.  
  24. Widget::~Widget()
  25. {
  26. delete ui;
  27. }
  28. void Widget::TheMax(Mat Input_iamge)
  29. {
  30. int width = Input_iamge.cols;
  31. int height = Input_iamge.rows;
  32. Mat image_2(height,width,CV_8UC1);
  33. for (int j = 0; j < height; j++)
  34. {
  35. for (int i = 0; i < width; i++)
  36. {
  37. int b = Input_iamge.at<Vec3b>(j, i)[0];
  38. int g = Input_iamge.at<Vec3b>(j, i)[1];
  39. int r = Input_iamge.at<Vec3b>(j, i)[2];
  40. image_2.at<uchar>(j, i) = saturate_cast<uchar>(max(r,max(b,g)));
  41. }
  42. }
  43. imwrite("D:/program/Qt/Qt5+opencv/108homework/image_2.png", image_2);
  44. }
  45. void Widget::TheMean(Mat Input_iamge)
  46. {
  47. int width = Input_iamge.cols;
  48. int height = Input_iamge.rows;
  49. Mat image_3(height,width,CV_8UC1);
  50. for (int j = 0; j < height; j++)
  51. {
  52. for (int i = 0; i < width; i++)
  53. {
  54. int b = Input_iamge.at<Vec3b>(j, i)[0];
  55. int g = Input_iamge.at<Vec3b>(j, i)[1];
  56. int r = Input_iamge.at<Vec3b>(j, i)[2];
  57. image_3.at<uchar>(j, i) = saturate_cast<uchar>((r+g+b)/3);
  58. }
  59. }
  60. imwrite("D:/program/Qt/Qt5+opencv/108homework/image_3.png", image_3);
  61. }
  62. void Widget::TheMeightedMean(Mat Input_iamge)
  63. {
  64. int width = Input_iamge.cols;
  65. int height = Input_iamge.rows;
  66. Mat image_4(height,width,CV_8UC1);
  67. for (int j = 0; j < height; j++)
  68. {
  69. for (int i = 0; i < width; i++)
  70. {
  71. int b = Input_iamge.at<Vec3b>(j, i)[0];
  72. int g = Input_iamge.at<Vec3b>(j, i)[1];
  73. int r = Input_iamge.at<Vec3b>(j, i)[2];
  74. image_4.at<uchar>(j, i) = saturate_cast<uchar>(0.299*r + 0.587*g + 0.114*b);
  75. }
  76. }
  77. imwrite("D:/program/Qt/Qt5+opencv/108homework/image_4.png", image_4);
  78. }
  79. void Widget::UI_init()
  80. {
  81. ui->image1->setFrameShape(QFrame::Box);
  82. ui->image1->setFrameShadow(QFrame::Sunken);
  83. ui->image1->setLineWidth(5);
  84. ui->image1->setLineWidth(10);
  85.  
  86. ui->image2->setFrameShape(QFrame::Box);
  87. ui->image2->setFrameShadow(QFrame::Sunken);
  88. ui->image2->setLineWidth(5);
  89. ui->image2->setLineWidth(10);
  90.  
  91. ui->image3->setFrameShape(QFrame::Box);
  92. ui->image3->setFrameShadow(QFrame::Sunken);
  93. ui->image3->setLineWidth(5);
  94. ui->image3->setLineWidth(10);
  95.  
  96. ui->image4->setFrameShape(QFrame::Box);
  97. ui->image4->setFrameShadow(QFrame::Sunken);
  98. ui->image4->setLineWidth(5);
  99. ui->image4->setLineWidth(10);
  100.  
  101. }

到此这篇关于基于Qt OpenCV的图像灰度化像素操作详解的文章就介绍到这了,更多相关Qt OpenCV图像灰度化操作内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号