当前位置: 首页 > news >正文

[OpenCV学习笔记]获取鼠标处图像的坐标和像素值

目录

  • 1、介绍
  • 2、效果展示
  • 3、代码实现
  • 4、源码展示

1、介绍

实现获取鼠标点击处的图像的坐标和像素值,灰度图显示其灰度值,RGB图显示rgb的值。
OpenCV获取灰度值及彩色像素值的方法:

//灰度图像:
image.at<uchar>(j, i) //j为行数,i为列数
//BGR彩色图像
image.at<Vec3b>(j, i)[0] //B分量
image.at<Vec3b>(j, i)[1] //G分量
image.at<Vec3b>(j, i)[2] //R分量

这里要通过鼠标点击事件来获取鼠标点击的位置和状态,选择OpenCV的setMouseCallback回调函数实现。

2、效果展示

PixelPos_Mouse.PNG

3、代码实现

onMouse.h

#ifndef ONMOUSE_H
#define ONMOUSE_H#include<iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;void onMouse(int event, int x, int y, int flags, void* param);  //evnet:鼠标事件类型 x,y:鼠标坐标 flags:鼠标哪个键void onMouse(int event, int x, int y, int flags, void* param)  //evnet:鼠标事件类型 x,y:鼠标坐标 flags:鼠标哪个键
{Mat* im = reinterpret_cast<Mat*>(param);switch (event) {case EVENT_LBUTTONDOWN://显示图像像素值if (static_cast<int>(im->channels()) == 1){//若图像为单通道图像,则显示鼠标点击的坐标以及灰度值switch (im->type()){case 0:cout << "at (" << x << ", " << y << " ) value is: " << static_cast<int>(im->at<uchar>(Point(x, y))) << endl; break;case 1:cout << "at (" << x << ", " << y << " ) value is: " << static_cast<int>(im->at<char>(Point(x, y))) << endl; break;case 2:cout << "at (" << x << ", " << y << " ) value is: " << static_cast<int>(im->at<ushort>(Point(x, y))) << endl; break;case 3:cout << "at (" << x << ", " << y << " ) value is: " << static_cast<int>(im->at<short>(Point(x, y))) << endl; break;case 4:cout << "at (" << x << ", " << y << " ) value is: " << static_cast<int>(im->at<int>(Point(x, y))) << endl; break;case 5:cout << "at (" << x << ", " << y << " ) value is: " << static_cast<int>(im->at<float>(Point(x, y))) << endl; break;case 6:cout << "at (" << x << ", " << y << " ) value is: " << static_cast<int>(im->at<double>(Point(x, y))) << endl; break;}}else{//若图像为彩色图像,则显示鼠标点击坐标以及对应的B, G, R值cout << "at (" << x << ", " << y << ")"<< "  B value is: " << static_cast<int>(im->at<Vec3b>(Point(x, y))[0])<< "  G value is: " << static_cast<int>(im->at<Vec3b>(Point(x, y))[1])<< "  R value is: " << static_cast<int>(im->at<Vec3b>(Point(x, y))[2])<< endl;}break;}
}
#endif // ONMOUSE_H

头文件onMouse.h主要实现鼠标点击事件的回调,输出点击时鼠标的坐标和对应的像素值。

main.cpp

    Mat image1 = imread("lena.png");if(image1.empty()){qDebug()<<"读取图像错误";}imshow("image1",image1);setMouseCallback("image1", onMouse, reinterpret_cast<void*>(&image1));

这里我用的Qt来实现的,要在pro文件里添加OpenCV库的引用

win32:CONFIG(release, debug|release): LIBS += -LD:/opencv/build/x64/vc15/lib/ -lopencv_world455
else:win32:CONFIG(debug, debug|release): LIBS += -LD:/opencv/build/x64/vc15/lib/ -lopencv_world455d
else:unix: LIBS += -LD:/opencv/build/x64/vc15/lib/ -lopencv_world455INCLUDEPATH += D:/opencv/build/include
DEPENDPATH += D:/opencv/build/include

4、源码展示

本小例程的代码放到我的开源gitte项目里,欢迎一起学习,也希望能收获你的小星星。
项目源码PixelPos_Mouse

相关文章:

  • 浏览器工作原理与实践--渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的
  • 码字日常,长芝士了
  • LangChain核心模块 Model I/O——Output Parsers
  • SpringMVC | SpringMVC中的 “文件上传和下载”
  • 【Unity】UI九宫格
  • 以太网交换——数据链路层
  • linux之zabbix自定义监控
  • C++测试代码
  • ARM中断实验
  • Docker指令
  • Excel 使用VBA自动调整插入图片大小到单元格
  • 一文读懂SPI通讯协议
  • 2025汤家凤考研数学视频,基础网课百度网盘课程+PDF讲义资料
  • 从边缘设备丰富你的 Elasticsearch 文档
  • Go 限流器-漏桶 VS 令牌桶 常用包原理解析
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • E-HPC支持多队列管理和自动伸缩
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • java第三方包学习之lombok
  • Median of Two Sorted Arrays
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 诡异!React stopPropagation失灵
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 数组的操作
  • 从如何停掉 Promise 链说起
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (26)4.7 字符函数和字符串函数
  • (pytorch进阶之路)扩散概率模型
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (汇总)os模块以及shutil模块对文件的操作
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)一些感悟
  • **PHP分步表单提交思路(分页表单提交)
  • .mysql secret在哪_MySQL如何使用索引
  • .NET NPOI导出Excel详解
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .Net各种迷惑命名解释
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET实现之(自动更新)
  • .sdf和.msp文件读取
  • @GlobalLock注解作用与原理解析
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [ C++ ] STL---仿函数与priority_queue
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [C++]C++类基本语法
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [Excel] vlookup函数
  • [HNOI2018]排列
  • [IE技巧] IE8中HTTP连接数目的变化