OpenCV Mat 图像处理基本操作
Published on 2022-06-20 16:20 in 分类: opencv with 萧海~
分类: opencv

OpenCV Mat 图像处理基本操作

    1. 图片加载、灰度图、 显示和保存
    cv::Mat img = cv::imread("01.jpg");
    //cv::Mat img = cv::imread("01.jpg", 0); //以灰度图读入
    cv::cvtColor(img, img, cv::COLOR_BGR2GRAY);
    cv::imshow("img_show", img);
    cv::waitKey();
    cv::imwrite("save.jpg", img);
    1. 图片宽、高、通道模式、平均值获取
    cv::Mat img = cv::imread("01.jpg");
    int width = img.cols;
    int height = img.rows;
    int channel_model = img.channels();
    cv::Scalar tempVal = cv::mean(img);
    float mean_B = tempVal.val[0];
    float mean_G = tempVal.val[1];
    float mean_R = tempVal.val[2];
    1. 创建指定大小,指定通道类型的空图像
    cv::Mat img = cv::imread("01.jpg");
    cv::Mat img_new1(300, 500, CV_8UC3); //高300,宽500
    cv::Mat img_new2(img.size(), CV_8UC1);
    1. 访问和操作图像像素
    int point_height = 50;
    int point_width = 100;
    cv::Mat img = cv::imread("01.jpg");
    img.at<cv::Vec3b>(point_height, point_width)[0] = 255;
    int point_value_B = img.at<cv::Vec3b>(point_height, point_width)[0];
    cv::Mat img_gray;
    cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);
    int point_value_gray = img_gray.at<uchar>(point_height, point_width);
    img_gray.convertTo(img_gray, CV_32F); //转为float类型
    float point_value_gray_f = img_gray.at<float>(point_height, point_width);
    1. 图像通道分离和合并
    cv::Mat img = cv::imread("01.jpg");
    std::vector<cv::Mat> rgb_images;
    cv::split(img, rgb_images);
    cv::Mat B = rgb_images[0];
    cv::Mat G = rgb_images[1] ;
    cv::Mat R = rgb_images[2];
    cv::Mat merged_img;
    cv::merge(rgb_images, merged_img);
    1. 在图像上输出文字
    cv::Mat img = cv::imread("01.jpg");
    cv::putText(img, "Text", cv::Point(50, 100), 0, 2, cv::Scalar(0, 0, 255));
    1. 图像缩放
    cv::Mat img = cv::imread("01.jpg");
    cv::resize(img, img, cv::Size(0.5 * img.cols , 0.5 * img.rows), 0, 0, cv::INTER_CUBIC);
    1. 查找非零值像素位置
    // Created by 牧野 CSDN https://blog.csdn.net/dcrmg
    cv::Mat img = cv::imread("01.jpg", 0);
    std::vector<cv::Point> locations;
    cv::findNonZero(img, locations); //查找非0像素位置
    for (int i = 0; i < locations.size(); i++) {
    cv::Point pt = locations[i];
    int pt_value = img.at<uchar>(pt);
    std::cout<<pt_value<<std::endl;
    }
    1. 图像阈值分割、 二值化
    cv::Mat img = cv::imread("01.jpg", 0);
    cv::Mat img_binary;
    cv::threshold(img, img_binary, 100, 255, cv::THRESH_BINARY); //指定阈值分割
    cv::Mat img_Otsu;
    cv::threshold(img, img_Otsu, 0, 255, cv::THRESH_OTSU); //大津阈值
    1. 图像裁剪、ROI
    cv::Mat img = cv::imread("01.jpg");
    cv::Rect rect(100, 200, 500, 300); //left-up point x, left-up point y, width, height
    cv::Mat roi = img(rect).clone();
    posted @   萧海~  阅读(320)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    点击右上角即可分享
    微信分享提示
    电磁波切换