zoukankan      html  css  js  c++  java
  • OpenCV(图像处理)—访问像素的三种方法

    方法一:用指针访问像素

     1 #include <opencv2/opencv.hpp>
     2 #include <opencv2/core/core.hpp>
     3 #include <opencv2/highgui/highgui.hpp>
     4 using namespace cv;
     5 using namespace std;
     6 void colorReduce(Mat &inputImage,Mat& outputImage,int div)
     7 {
     8 outputImage=inputImage.clone();//复制实参到临时变量
     9 int rowNumber=outputImage.rows;//行数
    10 int colNumber=outputImage.cols*outputImage.channels();//即每行元素个数=列数*通道数
    11 for(int i=0;i<rowNumber;i++)   //行循环    
    12 {
    13     uchar* data=outputImage.ptr<uchar>(i);//获取第i行的首地址
    14     for(int j=0;j<colNumber;j++)//列循环
    15     {
    16         data[j]=data[j]/div*div+div/2;//处理每个像素
    17     }
    18 }
    19 }
    20 
    21 int main()
    22 {
    23     Mat srcImage=imread("E://lena.jpg");
    24 imshow("原始数据",srcImage);
    25 Mat dstImage;
    26 dstImage.create(srcImage.rows,srcImage.cols,srcImage.type());//效果图的大小、类型与原图片相同
    27 double time0=static_cast<double>(getTickCount());
    28 colorReduce(srcImage,dstImage,32);//调用颜色空间缩减函数
    29 time0=((double)getTickCount()-time0)/getTickFrequency();//计算运行时间
    30 cout<<"此方法运行时间:"<<time0<<""<<endl;
    31 imshow("效果图",dstImage);
    32 waitKey(0);
    33 
    34 }

    运行效果:

    方法二:用迭代器iterator操作像素

     1 #include <opencv2/opencv.hpp>
     2 #include <opencv2/core/core.hpp>
     3 #include <opencv2/highgui/highgui.hpp>
     4 using namespace cv;
     5 using namespace std;
     6 
     7 void colorReduce(Mat &inputImage,Mat& outputImage,int div)
     8 {
     9 outputImage=inputImage.clone();//复制实参到临时变量
    10 //获取迭代器
    11 Mat_<Vec3b>::iterator it=outputImage.begin<Vec3b>();//初始位置的迭代器
    12 Mat_<Vec3b>::iterator itend=outputImage.end<Vec3b>();//终止位置的迭代器
    13 //存储彩色图像像素
    14     for(;it !=itend;++it)     
    15     {
    16         (*it)[0]=(*it)[0]/div*div+div/2;
    17         (*it)[1]=(*it)[1]/div*div+div/2;
    18         (*it)[2]=(*it)[2]/div*div+div/2;
    19     }
    20 }
    21 int main()
    22 {
    23     Mat srcImage=imread("E://lena.jpg");
    24 imshow("原始数据",srcImage);
    25 Mat dstImage;
    26 dstImage.create(srcImage.rows,srcImage.cols,srcImage.type());//效果图的大小、类型与原图片相同
    27 double time0=static_cast<double>(getTickCount());
    28 colorReduce(srcImage,dstImage,32);//调用颜色空间缩减函数
    29 time0=((double)getTickCount()-time0)/getTickFrequency();//计算运行时间
    30 cout<<"此方法运行时间:"<<time0<<""<<endl;
    31 imshow("效果图",dstImage);
    32 waitKey(0);
    33 
    34 }

    运行结果:

    方法三:动态地址计算

     1 #include <opencv2/opencv.hpp>
     2 #include <opencv2/core/core.hpp>
     3 #include <opencv2/highgui/highgui.hpp>
     4 using namespace cv;
     5 using namespace std;
     6 
     7 //方法三:动态地址计算
     8 void colorReduce(Mat &inputImage,Mat& outputImage,int div)
     9 {
    10 outputImage=inputImage.clone();//复制实参到临时变量
    11 int rowNumber=outputImage.rows;//行数
    12 int colNumber=outputImage.cols;//列数
    13 //存取彩色图像像素
    14 for(int i=0;i<rowNumber;i++)       
    15 {
    16     
    17     for(int j=0;j<colNumber;j++)
    18     {
    19         outputImage.at<Vec3b>(i,j)[0]=outputImage.at<Vec3b>(i,j)[0]/div*div+div/2;//蓝色通道
    20         outputImage.at<Vec3b>(i,j)[1]=outputImage.at<Vec3b>(i,j)[1]/div*div+div/2;//绿色通道
    21         outputImage.at<Vec3b>(i,j)[2]=outputImage.at<Vec3b>(i,j)[2]/div*div+div/2;//红色通道
    22     }
    23 }
    24 }
    25 int main()
    26 {
    27     Mat srcImage=imread("E://lena.jpg");
    28 imshow("原始数据",srcImage);
    29 Mat dstImage;
    30 dstImage.create(srcImage.rows,srcImage.cols,srcImage.type());//效果图的大小、类型与原图片相同
    31 double time0=static_cast<double>(getTickCount());
    32 colorReduce(srcImage,dstImage,32);//调用颜色空间缩减函数
    33 time0=((double)getTickCount()-time0)/getTickFrequency();//计算运行时间
    34 cout<<"此方法运行时间:"<<time0<<""<<endl;
    35 imshow("效果图",dstImage);
    36 waitKey(0);
    37 
    38 }
    萍水相逢逢萍水,浮萍之水水浮萍!
  • 相关阅读:
    [luoguP2622] 关灯问题II(状压最短路)
    [luoguP2016] 战略游戏(DP)
    FileUpload
    Mysql -- JDBC
    Mysql优化
    Mysql锁
    Mysql索引
    Mysql事务
    Mysql基本语句
    Listener
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/9601167.html
Copyright © 2011-2022 走看看