OpenCV遍历彩色图像、灰度图像的像素值方法
2016-11-01 22:05
495 查看
应用:将彩色图像转为灰度图像输出
方法一 使用at<Vec3b>(i, j) 和at<uchar>(i, j)
方法二 使用ptr函数和指针 (高效)
方法一 使用at<Vec3b>(i, j) 和at<uchar>(i, j)
void main() { //读入彩色图像 Mat img = imread("fruits.jpg"); imshow("原图", img); int rows = img.rows; int cols = img.cols; //生成和img同样大小的空白灰度图像 Mat grayImg = Mat(rows, cols, CV_8U); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { //彩色图像获取到单个像素 Vec3b pix = img.at<Vec3b>(i,j); //获取到RGB分量的值。 uchar B = pix[0]; uchar G = pix[1]; uchar R = pix[2]; //或者使用下面的方法 //uchar B = img.at<Vec3b>(i, j)[0]; //uchar G = img.at<Vec3b>(i, j)[1]; //uchar G = img.at<Vec3b>(i, j)[2]; //计算灰度值,然后赋值给灰度图中的像素 grayImg.at<uchar>(i,j) = R * 0.299 + G * 0.587 + B * 0.114;//灰度著名心理学公式 } } imshow("灰度图", grayImg); waitKey(0); }
方法二 使用ptr函数和指针 (高效)
void main() { //读入彩色图像 Mat img = imread("fruits.jpg"); imshow("原图", img); int rows = img.rows; int cols = img.cols; //生成和img同样大小的空白灰度图像 Mat grayImg = Mat(rows, cols, CV_8U); for (int i = 0; i < rows; i++) { //获取图像每一行的首地址 Vec3b *p = img.ptr<Vec3b>(i);//彩色图 //p指向地址 uchar *p2 = grayImg.ptr<uchar>(i);//灰度图 //*p指向内容 for (int j = 0; j < cols; j++) { //每次迭代获取图像列的地址 Vec3b &pix = *p++;//彩色图 //pix指向内容 uchar &pix2 = *p2++;//灰度图 //&pix指向地址 pix2 = pix[0] * 0.114 + pix[1] * 0.587 + pix[2] * 0.299; } } imshow("灰度图", grayImg); waitKey(0); }
相关文章推荐
- 来自一本国外OpenCV2书籍的示例-遍历图像像素的14种方法
- opencv学习笔记之对灰度图像遍历的三种方法
- opencv2-遍历图像像素的14种方法
- 【OpenCV应用笔记】(彩色/灰度)图像像素值读取并保存到txt文件
- opencv高效访问图像像素(遍历像素的方法总结)
- opencv开发笔记(七):三种方法遍历图像操作像素
- OpenCV应用笔记】(彩色/灰度)图像像素值读取并保存到txt文件
- OpenCV2 访问各个像素点的方法(图像遍历)
- opencv学习笔记之对灰度图像遍历的三种方法
- [HQ]OpenCV访问图像像素, 数组元素等方法收集
- 【OpenCV】图像遍历+像素压缩
- OpenCV访问图像像素的方法收集以及自己实践中得体会
- OpenCV学习C++接口:图像遍历+像素压缩
- 彩色(RGB/HSV)&灰度 图像像素值读取并保存到txt文件
- opencv中遍历图像每个像素点
- opencv学习(一)实现将彩色图像转换成灰度图像和二值图像
- opencv学习(5) 使用迭代器遍历图像的像素
- OpenCV对图像获取像素值方法总结
- opencv OpenCV访问图像像素, 数组元素等方法收集
- opencv 保存灰度图像的像素值