opencv:访问图像中像素的三类方法
来源:互联网 发布:战舰世界 知乎 编辑:程序博客网 时间:2024/05/21 10:30
见代码分析:
#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <iostream>using namespace std;using namespace cv;//全局函数声明void colorReduce (Mat& inputImage, Mat& outputImage, int div);//main函数入口int main(){ //创建原始图并显示 Mat srcImage = imread("1.jpg"); imshow("原始图", srcImage); //按原始图的参数规格来创建效果图 Mat dstImage; dstImage.create(srcImage.rows,srcImage.cols,srcImage.type()); //效果图的大小、类型与原图片相同 //记录起始时间 double time0 = static_cast<double>(getTickCount()); //调用颜色空间缩减函数 colorReduce(srcImage,dstImage,32); //计算运行时间并输出 time0 = ((double)getTickCount() - time0)/getTickFrequency(); cout << "此方法运行时间为:"<< time0 << "秒" << endl; //输出运行时间 //显示效果图 imshow("效果图",dstImage); waitKey(0);}//采用指针访问像素//void colorReduce(Mat& inputImage,Mat& outputImage,int div)//{// //参数准备// outputImage = inputImage.clone(); //复制实参到临时变量// int rowNumber = outputImage.rows; //行数// int colNumber = outputImage.cols*outputImage.channels(); //列数x通道数=每一行元素的个数//// //双重循环,遍历所有的像素值// for(int i = 0;i < rowNumber; i++) //行循环// {// uchar* data = outputImage.ptr<uchar>(i); //获取第i行的首地址// for(int j = 0;j<colNumber;j++) //列循环// {// //开始处理每个像素// data[j] = data[j]/div*div + div/2;// }// }//}//采用迭代器操作像素//void colorReduce(Mat& inputImage,Mat& outputImage,int div)//{// //参数准备// outputImage = inputImage.clone(); //复制实参到临时变量// //获取迭代器// Mat_<Vec3b>::iterator it = outputImage.begin<Vec3b>(); //初始位置迭代器// Mat_<Vec3b>::iterator itend = outputImage.end<Vec3b>(); //终止位置的迭代器//// //存取彩色图像像素// for(; it != itend;++it)// {// //开始处理每个像素// (*it)[0] = (*it)[0]/div*div + div/2;// (*it)[1] = (*it)[1]/div*div + div/2;// (*it)[2] = (*it)[2]/div*div + div/2;// }////}//动态地址计算void colorReduce(Mat& inputImage,Mat& outputImage,int div){ outputImage = inputImage.clone(); //复制实参到临时变量 int rowNumber = outputImage.rows; //行数 int colNumber = outputImage.cols; //列数 //存取彩色图像像素 for(int i=0;i<rowNumber;i++) { for(int j=0;j<colNumber;j++) { outputImage.at<Vec3b>(i,j)[0] = outputImage.at<Vec3b>(i,j)[0]/div*div + div/2; //蓝色通道 outputImage.at<Vec3b>(i,j)[1] = outputImage.at<Vec3b>(i,j)[1]/div*div + div/2; //绿色通道 outputImage.at<Vec3b>(i,j)[2] = outputImage.at<Vec3b>(i,j)[2]/div*div + div/2; //红色通道 } }}
0 0
- opencv:访问图像中像素的三类方法
- OpenCV学习笔记(七):访问图像中像素的三类方法
- Opencv访问图像像素的三种方法
- opencv之访问图像像素的 三种方法
- openCV中访问图像像素的两种方法
- OpenCV访问图像像素的方法
- opencv访问像素的三种方法
- opencv学习三种常用方法访问操作图像像素
- 《OpenCV3编程入门》访问图像中像素的三类方法
- python OpenCV 图像像素访问 (三)
- opencv里常用的访问图像像素数据方法
- opencv访问(Mat)图像的像素方法汇总
- OpenCV访问图像像素的方法收集以及自己实践中得体会
- 【OpenCV】访问图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 剑指offer-63.数据流中的中位数
- JS高级程序第一章理解
- 初学shell
- jQuery.map
- HR SaaS or社群电商,谁才是打开HR市场的真正钥匙?
- opencv:访问图像中像素的三类方法
- Git最简易使用
- opencv:感兴趣区域的操作:ROI
- 分布式环境下MySQL和Redis一致性
- 链式队列
- TensorFlow简介
- 发送短信
- Intel Edison通过eclipse点亮第一颗LED
- SQL Server 和 Oracle 以及 MySQL 有什么区别?