zoukankan      html  css  js  c++  java
  • OpenCV-C++ 图像的操作

    这一节主要介绍的内容主要包括:

    • 读取图像;
    • 修改像素值;

    读取图像

    // 读取图像
    Mat src = imread("/home/chen/dataset/lena.jpg");
    if (src.empty()){
        printf("could not load image.
    ");
        return -1;
    }
    
    // 显示图像
    namedWindow("src", WINDOW_AUTOSIZE);
    imshow("src", src);
    waitKey(0);
    

    修改图像像素值

    1. 将RGB图像转换成灰度图,并与255相减

    // 1. 将RGB转换成Gray,利用255去减像素
    Mat dst;
    cvtColor(src, dst, COLOR_BGR2GRAY);
    int rows = dst.rows;
    int cols = dst.cols;
    for (int row = 0; row < rows -1; row++){
        for (int col = 0; col < cols - 1; col++){
            int pixel = dst.at<uchar>(row, col);
            dst.at<uchar>(row, col) = 255 - pixel;
        }
    }
    
    namedWindow("dst", WINDOW_AUTOSIZE);
    imshow("dst", dst);
    

    2. 对原图像(三通道),并与255相减

    // 2. 对三维图像,利用255减去像素
    int rows = src.rows;
    int cols = src.cols;
    Mat dst;
    dst.create(src.size(), src.type());
    for (int row = 0; row < rows - 1; row++){
        for (int col = 0; col < cols - 1; col++){
            int b = src.at<Vec3b>(row, col)[0];
            int g = src.at<Vec3b>(row, col)[1];
            int r = src.at<Vec3b>(row, col)[2];
    
            // 赋值
            dst.at<Vec3b>(row, col)[0] = 255 - b;
            dst.at<Vec3b>(row, col)[1] = 255 - g;
            dst.at<Vec3b>(row, col)[2] = 255 - r;
    
        }
    }
    namedWindow("dst", WINDOW_AUTOSIZE);
    imshow("dst", dst);
    

    第二种方法:

    // 2.1 对三维图像,利用255减去像素
    Mat dst;
    bitwise_not(src, dst);
    namedWindow("dst", WINDOW_AUTOSIZE);
    imshow("dst", dst);
    

    第三种方法:

    Mat dst;
    dst.create(src.size(), src.type());
    dst = Scalar(255, 255, 255) - src;
    namedWindow("dst", WINDOW_AUTOSIZE);
    imshow("dst", dst);
    

    三种处理方式,结果图像如下所示:

    完成的代码如下:

    #include <iostream>
    #include <opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main(){
    
        // 读取图像
        Mat src = imread("/home/chen/dataset/lena.jpg");
        if (src.empty()){
            printf("could not load image.
    ");
            return -1;
        }
    
        // 1. 将RGB转换成Gray,利用255去减像素
        // Mat dst;
        // cvtColor(src, dst, COLOR_BGR2GRAY);
        // int rows = dst.rows;
        // int cols = dst.cols;
        // for (int row = 0; row < rows -1; row++){
        //     for (int col = 0; col < cols - 1; col++){
        //         int pixel = dst.at<uchar>(row, col);
        //         dst.at<uchar>(row, col) = 255 - pixel;
        //     }
        // }
    
        // namedWindow("dst", WINDOW_AUTOSIZE);
        // imshow("dst", dst);
    
        // 2. 对三维图像,利用255减去像素
        // int rows = src.rows;
        // int cols = src.cols;
        // Mat dst;
        // dst.create(src.size(), src.type());
        // for (int row = 0; row < rows - 1; row++){
        //     for (int col = 0; col < cols - 1; col++){
        //         int b = src.at<Vec3b>(row, col)[0];
        //         int g = src.at<Vec3b>(row, col)[1];
        //         int r = src.at<Vec3b>(row, col)[2];
    
        //         // 赋值
        //         dst.at<Vec3b>(row, col)[0] = 255 - b;
        //         dst.at<Vec3b>(row, col)[1] = 255 - g;
        //         dst.at<Vec3b>(row, col)[2] = 255 - r;
    
        //     }
        // }
        
        // 2.1 对三维图像,利用255减去像素
        // Mat dst;
        // bitwise_not(src, dst);
        // namedWindow("dst", WINDOW_AUTOSIZE);
        // imshow("dst", dst);
    
        Mat dst;
        dst.create(src.size(), src.type());
        dst = Scalar(255, 255, 255) - src;
        namedWindow("dst", WINDOW_AUTOSIZE);
        imshow("dst", dst);
    
        // 显示图像
        namedWindow("src", WINDOW_AUTOSIZE);
        imshow("src", src);
        waitKey(0);
    
        return 0;
    }
    
  • 相关阅读:
    六 Vue学习 首页 (下)
    【Python】xpath中为什么粘贴进去代码后老报错?如何在定位元素的时候准确找到定位切入点?
    【Python】if相关知识点
    【Python】获取翻页之后的各页面中的属性值。
    【Python】如何取到input中的value值?
    【Python】两个for循环嵌套练习
    【Python】自动化测试框架-共通方法汇总
    【Python】Python 打印和输出更多用法。
    【python】Python3 循环语句
    【Python+Selenium】猪猪练习成功版:csv文件的输入和输出(运行环境:python3.5版本)
  • 原文地址:https://www.cnblogs.com/chenzhen0530/p/14619372.html
Copyright © 2011-2022 走看看