【笔记】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);

2. 图片宽、高、通道模式、平均值获取

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];

3. 创建指定大小,指定通道类型的空图像

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);

4. 访问和操作图像像素

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);

5. 图像通道分离和合并

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);

6. 在图像上输出文字

cv::Mat img = cv::imread("01.jpg");
cv::putText(img, "Text", cv::Point(50, 100), 0, 2, cv::Scalar(0, 0, 255));

7. 图像缩放

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);

8. 查找非零值像素位置

// 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;
}

9. 图像阈值分割、 二值化

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); //大津阈值

10. 图像裁剪、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();

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值