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;
    }
    
  • 相关阅读:
    krpano--控制热点跳转到场景的指定视角
    bzoj 4237: 稻草人 -- CDQ分治
    bzoj 4176: Lucas的数论 -- 杜教筛,莫比乌斯反演
    bzoj 3545/3551: [ONTAK2010]Peaks -- 主席树,最小生成树,倍增
    bzoj 4627: [BeiJing2016]回转寿司 -- 权值线段树
    bzoj 1901: Zju2112 Dynamic Rankings -- 主席树,树状数组,哈希
    bzoj 3252: 攻略 -- 长链剖分+贪心
    bzoj 5055: 膜法师 -- 树状数组
    bzoj 1006: [HNOI2008]神奇的国度 -- 弦图(最大势算法)
    bzoj 1176: [Balkan2007]Mokia&&2683: 简单题 -- cdq分治
  • 原文地址:https://www.cnblogs.com/chenzhen0530/p/14619372.html
Copyright © 2011-2022 走看看