当前位置:   article > 正文

Opencv(C++)笔记--图像的二值化、修改对比度和亮度_c++ opencv 二值化

c++ opencv 二值化

1--二值化代码

  1. #include <opencv2/opencv.hpp>
  2. #include <cstdio>
  3. int main(int argc, char *argv[]){
  4. cv::Mat src = cv::imread("../test1.jpg");
  5. cv::Mat gray;
  6. cv::Mat bin;
  7. cv::Mat ibin;
  8. // 灰度图转化
  9. cvtColor(src, gray, cv::COLOR_BGR2GRAY);
  10. //二进制阈值化
  11. threshold(gray, bin, 100, 255, cv::THRESH_BINARY);
  12. //二进制反阈值化
  13. threshold(gray, ibin, 100, 255, cv::THRESH_BINARY_INV);
  14. cv::imshow("bin", bin);
  15. cv::imshow("src", src);
  16. cv::imshow("ibin", ibin);
  17. cv::waitKey(0);
  18. return 0;
  19. }
  1. cmake_minimum_required(VERSION 3.24) # 指定 cmake的 最小版本
  2. project(test) # 设置项目名称
  3. find_package(Opencv REQUIRED)
  4. INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
  5. add_executable(main main.cpp) # 生成可执行文件
  6. target_link_libraries(main ${OpenCV_LIBS}) # 设置target需要链接的库

2--二值化结果

3--修改对比度和亮度代码

  1. #include <opencv2/opencv.hpp>
  2. #include <cstdio>
  3. void ChangeGain(const cv::Mat &src, cv::Mat &des, float a, int b){
  4. // g(r, c) = a*f(r, c) + b
  5. for (int r = 0; r < src.rows; r++){
  6. for (int c = 0; c < src.cols; c++){
  7. for (int i = 0; i < 3; i++){
  8. des.at<cv::Vec3b>(r, c)[i] = cv::saturate_cast<uchar>(a * src.at<cv::Vec3b>(r, c)[i] + b);
  9. }
  10. }
  11. }
  12. }
  13. int main(int argc, char *argv[]){
  14. cv::Mat src = cv::imread("../test1.jpg");
  15. cv::Mat des(src.rows, src.cols, src.type());
  16. ChangeGain(src, des, 2.0, 50);
  17. cv::imshow("src", src);
  18. cv::imshow("des", des);
  19. cv::waitKey(0);
  20. return 0;
  21. }

4--修改对比度和亮度结果

5--知识点

①修改对比度和亮度的公式:g(i, j) = a * f(i, j) + b;

对比度a的取值范围一般为(1.0 ~ 3.0),亮度b的取值范围一般为(0 ~ 100);

②saturate_cast是OpenCV防止溢出的一个函数,当像素值超过255时,修正为255,当像素值为负数时,修正为0;

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

闽ICP备14008679号