zoukankan      html  css  js  c++  java
  • 图像处理---《获取图像的像素指针、像素范围的处理、掩膜应用》

    图像处理---《图片的掩膜处理-->提高图像的亮度》

      学习:针对一张图片,(1)如何获取图像的像素指针、(2)像素范围的处理、(3)掩膜应用

    /***************************************************************************************
    作者:@WP20190612
    环境:VS2010 + OpenCV2.4.3 功能:掩膜操作---提高图像的对比度 说明: 知识1:获取图像的像素指针 CV_Assert(myImage.depth()==CV_8U); Mat.ptr<uchar>(int i=0); 获取像素矩阵的指针,索引i表示第几行,从0开始计数 const uchar* current=myImage.ptr<uchar>(row); 获取当前行的指针 p(row, col)=current[col]; 获取当前像素点p(row, col)的像素值 要点---要明确哪个像素指针可以调整,哪里不可以调整 知识点2: 像素范围的处理 saturate_cast<uchar>, 确保RGB值 范围在0~255之间。 saturate_cast<uchar>(-100) 返回0; saturate_cast<uchar>(288) 返回255; saturate_cast<uchar>(100) 返回100; 知识点3: 掩膜操作---提高图像的对比度 **************************************************************************************
    */ //-------------------------------功能:自己写函数 实现 图像的掩膜操作-------------------- #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; int main (int argc, char** argv) //argumentss 参数;argc命令行参数个数; { Mat src, dst; src = imread("D:\work_VS2010\example_opencv\test001.png"); if (!src.data) { printf("could not load image ... "); return -1; //return 0 成功完成本函数;return -1 未能完成本函数 } namedWindow("input image", CV_WINDOW_AUTOSIZE); imshow("input image", src); //----------------------------开始处理图像--------------------------------------- //int cols = src.cols; // 单通道 int cols = (src.cols-1)*src.channels(); // 多通道图像的行数---图像的宽度 int offsetX = src.channels(); // 通道数 int rows = src.rows; dst = Mat::zeros(src.size(), src.type()); // 初始化一个与原图像矩阵大小一致的0矩阵,用于存放处理后的图像 //开始掩膜函数处理 for (int row=1; row<(rows-1); row++) { //获取像素的位置指针 const uchar* current =src.ptr<uchar>(row); //当前像素的位置指针 const uchar* previous=src.ptr<uchar>(row-1); //当前像素之前一个像素的位置指针 const uchar* next =src.ptr<uchar>(row+1); //当前像素之后一个像素的位置指针 uchar* output = dst.ptr<uchar>(row); for(int col=offsetX; col<cols; col++) { //output[col]=5*current[col]-(current[col-offsetX] + current[col+offsetX] + previous[col] + next[col]); //毛刺效果 output[col]=saturate_cast<uchar>(5*current[col]-(current[col-offsetX] + current[col+offsetX] + previous[col] + next[col]) );//无毛刺,提亮的效果 } } namedWindow("the image after mask", CV_WINDOW_AUTOSIZE ); imshow("the image after mask",dst); //保存图像 imwrite("D:\work_VS2010\example_opencv\test001_result.png", dst); //----------------------------结束处理图像--------------------------------------- waitKey(0); return 0; }

    /***************************************************************************************
    作者:@WP20190612
    功能:掩膜操作---提高图像的对比度 说明: 借用OpenCV中的API---filter2D() 掩膜函数进行 **************************************************************************************
    */ //-------------------------------功能:filter2D() 进行掩膜处理-------------------- #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; int main (int argc, char** argv) //argumentss 参数;argc命令行参数个数; { Mat src, dst; src = imread("D:\work_VS2010\example_opencv\test001.png"); if (!src.data) { printf("could not load image ... "); return -1; //return 0 成功完成本函数;return -1 未能完成本函数 } namedWindow("input image", CV_WINDOW_AUTOSIZE); imshow("input image", src); //----------------------------开始处理图像--------------------------------------- //使用filter2D() 掩膜函数 Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); filter2D(src, dst, src.depth(), kernel); namedWindow("the image after mask", CV_WINDOW_AUTOSIZE ); imshow("the image after mask",dst); //保存图像 imwrite("D:\work_VS2010\example_opencv\test001_result.png", dst); //----------------------------结束处理图像--------------------------------------- waitKey(0); return 0; }

     

  • 相关阅读:
    Linux内核从原理到代码详解
    linux内核研究-8-块设备I/O层
    《Linux内核分析》课程总结
    Nginx 重写规则指南1
    Nginx初探
    Nginx源码分析:3张图看懂启动及进程工作原理
    nginx源码分析 +redis的那些事儿
    I/O 模型及其设计模式
    高并发性能调试经验分享
    myawr
  • 原文地址:https://www.cnblogs.com/carle-09/p/11027863.html
Copyright © 2011-2022 走看看