#include <opencv2/opencv.hpp>
int main() {
// 读取图片
cv::Mat img = cv::imread("1.bmp");
// 检查图片是否成功读取
if (img.empty()) {
std::cerr << "Error: Loading image" << std::endl;
return -1;
}
// 创建窗口并显示图片
//cv::namedWindow("Image Display", cv::WINDOW_AUTOSIZE);
//cv::imshow("Image Display", img);
// 等待按键事件,之后关闭窗口
//cv::waitKey(0);
//cv::destroyAllWindows();
//图像缩放
cv::Mat img_resize;
cv::resize(img, img_resize, cv::Size(), 0.5, 0.5);
//计算图像通道数
int channels = img_resize.channels();
std::cout << "通道数:" << channels << std::endl;
//将多通道图像分为单通道图像
std::vector<cv::Mat> bgr;
cv::split(img_resize, bgr);
//cv::imshow("b通道", bgr[0]);
//cv::waitKey(0);
//cv::imshow("g通道", bgr[1]);
//cv::waitKey(0);
//cv::imshow("r通道", bgr[2]);
//cv::waitKey(0);
//cv::destroyAllWindows();
//转化为image watch 可以查看的格式
cv::Mat img_b=bgr[0];
cv::Mat img_g=bgr[1];
cv::Mat img_r=bgr[2];
//增强对比度
cv::Mat img_jiance=img_r*3;
//增加灰度值
cv::Mat img_gray=img_r+100;
//转化为其他颜色空间
cv::Mat img_hsv;
cv::cvtColor(img, img_hsv, cv::COLOR_BGR2HSV);
//通道运算-加法
cv::Mat img_add;
cv::add(img_b, img_g, img_add);
//通道运算-减法
cv::Mat img_sub;
cv::subtract(img_b, img_g, img_sub);
//通道运算-乘法
cv::Mat img_mul;
cv::multiply(img_b, img_g, img_mul);
//通道运算-除法 注意除数不能为0
cv::Mat img_div;
cv::divide(img_b, img_g, img_div);
//通道运算-位运算
cv::Mat img_bitwise;
cv::bitwise_and(img_b, img_g, img_bitwise);
//通道运算-逻辑运算
cv::Mat img_logic;
cv::bitwise_or(img_b, img_g, img_logic);
//通道运算-异或运算
cv::Mat img_xor;
cv::bitwise_xor(img_b, img_g, img_xor);
//通道运算-取反
cv::Mat img_not;
cv::bitwise_not(img_b, img_not);
//通道运算-反相
cv::Mat img_inv;
cv::bitwise_not(img, img_inv);
//通道运算-最大值
cv::Mat img_max;
cv::max(img_b, img_g, img_max);
//通道运算-最小值
cv::Mat img_min;
cv::min(img_b, img_g, img_min);
//通道运算-阈值化
cv::Mat img_threshold;
cv::threshold(img_b, img_threshold, 127, 255, cv::THRESH_BINARY);
//通道运算-阈值化2
cv::Mat img_threshold2;
cv::threshold(img_b, img_threshold2, 127, 255, cv::THRESH_BINARY_INV);
//通道运算-阈值化3
cv::Mat img_threshold3;
cv::threshold(img_b, img_threshold3, 127, 255, cv::THRESH_TRUNC);
//通道运算-阈值化4
cv::Mat img_threshold4;
cv::threshold(img_b, img_threshold4, 127, 255, cv::THRESH_TOZERO);
//通道运算-阈值化5
cv::Mat img_threshold5;
cv::threshold(img_b, img_threshold5, 127, 255, cv::THRESH_TOZERO_INV);
//图像增强
cv::Mat img_equalize;
cv::equalizeHist(img_b, img_equalize);
return 0;
}
学习笔记——opencv图像基本运算方法
最新推荐文章于 2025-11-24 11:45:52 发布
956

被折叠的 条评论
为什么被折叠?



