OpenCV遍历彩色图像、灰度图像的像素值方法
https://blog.csdn.net/mooneve/article/details/53001677
应用:将彩色图像转为灰度图像输出
方法一 使用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);
}
方法二 使用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);
}
OpenCV遍历彩色图像、灰度图像的像素值方法的更多相关文章
- opencv 3.1.0 访问像素值的三种方法(C++)
三种方法分别问: 指针访问:void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div); 迭代器访 ...
- opencv输出图片像素值
需求:在控制台输出灰度图像的像素值 代码: #include <stdio.h> #include <iostream> #include <opencv2/core/c ...
- Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像
前文传送门: 「Python 图像处理 OpenCV (1):入门」 普通操作 1. 读取像素 读取像素可以通过行坐标和列坐标来进行访问,灰度图像直接返回灰度值,彩色图像则返回B.G.R三个分量. 需 ...
- OpenCV ——遍历图像方法
转自http://blog.csdn.net/daoqinglin/article/details/23628125 ; y < testImage->height; y++) { uch ...
- 怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?
分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.b ...
- Opencv利用Mat访问像素值
如果是采用Mat形式存储,想要访问灰度图像的灰度值,可以采用如下方法: 如果是彩色图像,采用如下方法: 说明: 其中gray_value中存放灰度值,image是读入的图像,i表示行,j表示列: co ...
- opencv入门系列教学(五)图像的基本操作(像素值、属性、ROI和边框)
0.序言 每个图像是由一个个点组成的,而这些点可以表示为像素值的形式. 这篇博客里我们将学会: 访问像素值并修改它们 . 访问图像属性 . 设置感兴趣区域(ROI) . 分割和合并图像. 对于图像的基 ...
- 图像相似度计算之哈希值方法OpenCV实现
http://blog.csdn.net/fengbingchun/article/details/42153261 图像相似度计算之哈希值方法OpenCV实现 2014-12-25 21:27 29 ...
- c#图像处理入门(-bitmap类和图像像素值获取方法)
c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义 ...
随机推荐
- ES6之Object.assign()详解
译者按: 这篇博客将介绍ES6新增的Object.assign()方法. 原文: ECMAScript 6: merging objects via Object.assign() 译者: Funde ...
- WORLD F4快捷重复上一步操作
只需做一次动作,后面就直接按F4即可重复上一次操作.
- JavaScript for/in 语句 遍历数组内容
for-in遍历 for-in是为遍历对象而设计的,不适用于遍历数组. 遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0","1" ...
- vue的data的数据进行指定赋值,用于筛选条件的清空,或者管理系统添加成功后给部分数据赋值为空
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js 判断数组中的值是否都相等
function isAllEqual(array) { if (array.length > 0) { return !array.some(function(value, index) { ...
- Android开发三种第三方图片加载的框架
最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...
- Android为TV端助力 转载:内存泄露与内存溢出的区别
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. ...
- WPF:解决DataGrid横向滚动条无法显示的问题
DataGrid的最后一列的宽度设置为“Width=”auto””即可. 如果显示指定长度或者设置为“*”,那么不管怎么拖动列头,或者不管行里面的内容有没有超过DataGrid的显示区域,DataGr ...
- 章节七、4-Sets
一.set中不允许存在相同的元素 package ZangJie7; import java.util.ArrayList; import java.util.HashSet; import java ...
- 我的第一个远程代码库房:建立Github仓库 心得
一直想有一个自己的代码库,搞了两天终于搞定了,把自己的代码上传到github的愿望终于实现了,虽然仅仅是个开始. 在搭建的过程中,吸收了些知识,记录在这里,以作为分享. Git 和 Github 的区 ...