zoukankan      html  css  js  c++  java
  • opencv 掩膜操作 滤波 卷积核定义 增强对比度 掩膜运算

      1 /*
      2 矩阵的掩膜操作
      3 
      4     0 掩膜mask 在这里进行增强对比度:
      5         [
      6          [ 0,-1, 0 ],
      7          [-1, 5, -1],
      8          [ 0,-1, 0 ]
      9         ]
     10       使用mask滑动图片每一个位置,进行卷积运算
     11       这里这个mask会增强图片的对比度
     12     
     13     1 获取图像指针
     14         const uchar* current = Mat对象.ptr<uchar>(row)
     15         获取了 当前图像的 第row行像素的数组
     16         
     17         p(row, col) = current[col]
     18         获取了第row行第col列的点
     19 
     20     2 像素范围处理 确保值在0到255之间
     21         saturate_cast<uchar>(值)
     22             传入值小于0时候返回0
     23             大于255时候 返回255
     24             在0-255之间 返回正常数
     25 
     26     3 定义掩膜
     27         Mat kernel = (Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
     28         定义了一个3*3大小的掩膜,里面的内容:
     29         [
     30             [ 0,-1, 0 ],
     31             [-1, 5, -1],
     32             [ 0,-1, 0 ]
     33         ]
     34     4 掩膜运算
     35         filter2D(src, dst, src.depth(), kernel)
     36             src: 原图像
     37             dst: 输出图像
     38             src.depth() 原图像的深度 32 24 8 等
     39             kernel: 掩膜核
     40 */
     41 
     42 #include <opencv2/opencv.hpp>
     43 #include <iostream>
     44 #include <math.h>
     45 using namespace cv;
     46 
     47 int main() {
     48     Mat src, dst;
     49     src = imread("d:/图片/m2.jpg");    // 载入原图像
     50     if (!src.data) {    // 如果有读取到
     51         printf("没有找到图片");
     52         return -1;
     53     } 
     54     // 显示原始图像
     55     namedWindow("输入图片", CV_WINDOW_AUTOSIZE);
     56     imshow("输入图片", src);
     57 
     58     // 输出图像的初始化  与原图像相同,像素值初始化为0
     59     dst = Mat::zeros(src.size(), src.type());
     60 
     61     /*
     62     // 手动实现一个掩膜操作
     63 
     64     // 图像的宽度 为 宽度*通道数
     65     int cols = (src.cols) * src.channels();        // 列数 宽度
     66     int rows = src.rows;    // 行数 高度
     67     int offsetx = src.channels();    // 通道数 存在列里面
     68     
     69     // 掩膜操作没有从0 0 开始是为了把边界让开,掩膜是3*3的, 中间一个是目标位置。
     70     for (int row = 1; row < rows - 1; row++) {
     71         // 获取通道对应的指针
     72         const uchar* previous = src.ptr<uchar>(row - 1);
     73         const uchar* current = src.ptr<uchar>(row);
     74         const uchar* next = src.ptr<uchar>(row + 1);
     75         uchar* output = dst.ptr<uchar>(row);
     76         for (int col = offsetx; col < cols - offsetx ; col++) {
     77             // 掩膜运算    并且控制像素值在0到255之间
     78             output[col] = saturate_cast<uchar>(    // 控制像素值0到255之间
     79                     5 * current[col] -    // 当前像素值
     80                         (
     81                             current[col - offsetx] +        // 左边像素值
     82                             current[col + offsetx] +        // 右边像素值
     83                             previous[col]+next[col]        // 上合下的像素值
     84                         )
     85                 );
     86         } 
     87     }
     88 
     89     */
     90     // 计算时间花费
     91     double t = getTickCount();
     92 
     93     // 调用掩膜运算
     94     // 初始化一个掩膜
     95     Mat kernel = (Mat_<char>(3, 3) << 
     96                             0, -1, 0, 
     97                             -1, 5, -1, 
     98                             0, -1, 0);
     99     filter2D(src, dst, src.depth(), kernel);
    100 
    101     // 计算时间花费
    102     double time_cost = (getTickCount() - t) /getTickFrequency();
    103     printf("花费时间:%f", time_cost);
    104 
    105     namedWindow("掩膜操作", CV_WINDOW_AUTOSIZE);
    106     imshow("掩膜操作", dst);
    107 
    108     waitKey(0);
    109     return 0;
    110 }
  • 相关阅读:
    成为专业程序员路上用到的各种优秀资料、神器及框架
    深度学习的57个专业术语
    Tensorflow实现Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)
    Python抓取视频内容
    Dataflow编程模型和spark streaming结合
    开启mysql的远程访问
    OpenSSL拒绝服务漏洞(CNVD-2016-01479)
    多款Apple产品libxml2内存破坏漏洞
    Mozilla Network Security Services拒绝服务漏洞
    Linux kernel 'mq_notify'内存错误引用漏洞
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/9379726.html
Copyright © 2011-2022 走看看