我最开始学习OpenCV的时候,网上搜索,获取某个像素点的值,大概是这样的,

srcImg.at<uchar>(i, j)

当然这样可以获取,但是效率很低,也就是速度很慢,然后网上搜索了第二个方法,大概是这样的

int MainWindow::brightTest(Mat &grayImage){int height = grayImage.rows;int width = grayImage.cols;unsigned int sumBright = 0;int totalCount = height * width;if(totalCount == 0){return -1;}for(int i = 0; i < height; i++){for(int j = 0; j < width; j++){sumBright += grayImage.data[i * width + j];}}return sumBright / totalCount;
}

直观上看,也没啥问题,因为data指的就是Mat的数据区,然后根据坐标来算出具体的位置偏移,再获取像素值,但这里实际上是有一个坑,就是说Mat的数据可能是不连续的,也就是如果用isContinuous函数来判断的话,可能数据不是连续存储的,可以参考

OpenCV isContinuous()连续存储的问题_pan_jinquan的博客-CSDN博客

cv::Rect rect(1, 1, 100, 100);cv::Mat crop_img = src(rect);//裁剪后的图像是不连续的

而我传入的参数,经常是传入ROI区域,在按照上述方法调用时,经常获取不到预期结果,

之前想的办法是,如果传入一个grayImage,那我就先clone一下,clone之后的图像就可以获取到正确的结果,

crop_img2 = crop_img.clone();//重新clone()后的图像是连续的

这是以前我经常干的事儿,当然实际也有另一个方案,对于不连续存储的数据,也能获取到正确的结果,参考代码如下:

int MainWindow::brightTest(Mat &grayImage){int height = grayImage.rows;int width = grayImage.cols;unsigned int sumBright = 0;int totalCount = height * width;if(totalCount == 0){return -1;}for(int i = 0; i < height; i++){for(int j = 0; j < width; j++){sumBright += grayImage.ptr<uchar>(i)[j];}}return sumBright / totalCount;
}

也就是用ptr的方法来获取像素点的亮度值

备份CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(CameraShow)if(MSVC)option(OpenCV_STATIC "Use static OpenCV libraries" OFF)
endif()find_package(OpenCV REQUIRED)include_directories(. ${OpenCV_INCLUDE_DIRS})add_executable(CameraShowmain.cpp)
target_link_libraries(CameraShow ${OpenCV_LIBS})

opencv获取图像像素值的坑相关推荐

  1. 利用Opencv3.4.15 vs2017实现鼠标获取图像像素值坐标、RGB值、HSV值

    //功能:实现鼠标左键点击可以返回图像像素值坐标.HSV值.RGB值 #include<opencv2/opencv.hpp> #include<iostream> #incl ...

  2. MATLAB中的impixel函数——获取图像像素值

    功能:获取图像像素值.函数返回指定图像的红.绿.蓝颜色值 语法介绍: P=impixel(I) 返回灰度图像中用户指定的像素或像素集合的数据值,如果用户没有指定输入对象,impixel对于当前轴中的图 ...

  3. OpenCV 获取图像像素的最大最小值及其对应的位置 minMaxLoc(仅适用于单通道图像)

    minMaxLoc仅适用于单通道图像,对于多通道,可使用split函数转换为单通道. #include<opencv2/opencv.hpp> #include using namespa ...

  4. C++ opencv之像素值统计(minMaxLoc,meanStdDev)

    一.引言 这篇博客的主要知识点为:像素值统计 最小(min) 最大(max) 均值(mean) 标准方差(standard deviation) API 的知识点为: 最大最小值minMaxLoc 计 ...

  5. MATLAB图像处理(三):获取图像像素值、改变像素值及像素数

    一.原理 图像由像素组成,imread 函数可读取图像每个像素的RGB值. RGB图的每个像素的像素值一般由三个变量r.g.b组成(0-255). 灰度图的每个像素的像素值一般只有一个值(0-255) ...

  6. OpenCV4---像素操作(读写像素、修改像素值)

    四.像素操作(读写像素.修改像素值) 1.遍历图像像素 int height = gray_src.rows;//获取图像行数 int width = gray_src.cols;//获取图像列数 f ...

  7. opencv获得图片的像素宽度_OpenCV中获取图像某一像素值

    Jquery中文网 > 脚本编程  > C语言  > 正文 OpenCV中获取图像某一像素值 OpenCV中获取图像某一像素值 发布时间:2018-12-01   编辑:www.jq ...

  8. OpenCV 笔记(06)— Mat 结构、像素值存储方法、创建 Mat 对象各种方法、Mat 对象的运算

    数字图像中的每个点都称为像素(对于图像元素),并且每个像素可以存储一个或多个值,这取决于它是否是仅存储一个值的黑白图像(也称为二进制图像,比如只存储0或1),还是存储两个值的灰度图像,或者是存储三个值 ...

  9. opencv(2)- 处理像素值

    opencv中使用Mat数据类型表示图像,这是类似int.float等传统类型的一种opencv中定义的数据类型. opencv常见的数据类型: point:代表二维点,用于图像坐标点.如point( ...

最新文章

  1. springBoot AOP切面编程
  2. Go的sync.Pool(五)
  3. 6.1 图的深度优先和广度优先搜索
  4. #celery#周期性任务
  5. CSRF攻击原理与防御方法
  6. 网络爬虫抓包使用及通过表单请求
  7. motion加树莓派打造实时监控
  8. python,pycharm安装
  9. js的this作用域
  10. 数据仓库:金融/银行业的分层架构篇
  11. np.sum和np.add.reduce
  12. C盘扩容,解决电脑卡顿
  13. Nginx配置移动端和电脑端自动双向跳转(301重定向的实际场景,附带apache配置)
  14. Android 分享到LINE
  15. 西瓜视频解析原理及源码,使用CRC32的签名算法,获得视频源地址
  16. Python 源码学习:类型和对象
  17. C语言字符串去空格(最简单版本)
  18. OpenNi学习笔记
  19. android 选择答题功能,Android实现选择题答题(包括单选、多选和答题卡)
  20. kalman滤波纯纯纯纯纯纯理论推导

热门文章

  1. adb.exe: more than one device/emulator
  2. logcat 结合 grep 过滤 log 日志信息
  3. Android ProgressBar 加载中界面实现(loading 动画) 实现菊花的效果
  4. CF533A Berland Miners
  5. 2022-2028年中国电动汽车充换电站市场深度调研及投资前景预测报告(全卷)
  6. bootstrap:按钮,下拉菜单
  7. 一个较为详细的ETL系统实现方案
  8. 动态更新 AGS Cache
  9. 未能从程序集 XX加载类型XXX的错误解决方法(借以提醒NHibernate使用者)
  10. html中有csstext方法吗,style对象的cssText方法有哪些使用方法