使用Qt实现ImageWatch图片查看功能,图片上鼠标右击查看灰度图像每个像素点的值

ImageWatch,图片放大之后可以查看灰度图像每个像素点的值
请添加图片描述
想用qt实现一下这个功能 在网上查询之后在https://libaineu2004.blog.csdn.net/article/details/124217848?spm=1001.2014.3001.5502指导下 自己按照自己项目的需求完善了这个类似功能
感谢:libaineu2004

需求:高帧率灰度图像一直在软件界面输出,想做到实时刷新 能够看见每个像素坐标点下的像素值 做到ImageWatch之类的效果
环境:Qt5.13.2+vs2015

实现:
1.高帧率刷新的灰度图像
高帧率刷新的灰度图像
2.以滚动条拉伸的像素网格图请添加图片描述

请添加图片描述

具体实现:QGraphicsView接收图像数据 显示图像;

重写QGraphicsView鼠标右键事件自定义信号
		void fun_GraphicsView::mousePressEvent(QMouseEvent* e)
		{
			if (e->button() == Qt::RightButton)
			{
				emit Leftclick();
			}
		}
信号槽 开始创建表格
connect(ui->GraphicsView, SIGNAL(Leftclick()), this, SLOT(set_LeftclickView0()));
//图像数据表
void  set_LeftclickView0()
{
	tablewidget_open = true;
	ui->tableWidget->setVisible(true);
	ui->imageBox0->setVisible(false);
	ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
	ui->tableWidget->verticalHeader()->setStretchLastSection(true);
	ui->tableWidget->setRowCount(img_height);     //设置行数 图片的高度 
	ui->tableWidget->setColumnCount(img_width);   //设置列数 图片的宽度
	inti_qtablewidget();//设置网格数据
}
	int HScrol_tableWidget = 0;//记录高的滑块位置
	int WScrol_tableWidget = 0;//记录宽的滑块位置
//图像宽高过大 用tableWidget一次显示所有网格数据卡顿 改变为移动到某个位置显示某个区域当前的图像数据
	connect(ui->tableWidget->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(acceptHScrollValueChanged(int)));
	connect(ui->tableWidget->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(acceptVScrollValueChanged(int)));

	void disp::acceptHScrollValueChanged(int value)
	{//宽
		WScrol_tableWidget = value;
		if (WScrol_tableWidget < 30)
			return;
		inti_qtablewidget();//设置网格数据
	}
	
	void disp::acceptVScrollValueChanged(int value)
	{//高
		HScrol_tableWidget = value;
		if (HScrol_tableWidget < 30)
			return;
		inti_qtablewidget();//设置网格数据
	}
//设置网格数据 根据获取的宽高滑块的大小从全局的图像buffer里面取值 (30格子内偏移量)
void   inti_qtablewidget()
{
	for (int rows = HScrol_tableWidget; rows <HScrol_tableWidget + 30; rows++)//8
	{
		if (rows >= img_height)
			break;
		for (int columns = WScrol_tableWidget; columns <WScrol_tableWidget+30; columns++)//255
		{
			if (columns >= img_width)
				break;
			int j = (unsigned char)buffer[img_width*rows + columns];
			ui->tableWidget->setItem(rows, columns, new QTableWidgetItem(QString::number(j, 16)));
			ui->tableWidget->item(rows, columns)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
		}
	}
}

//buffer改变网格数据随之改变 根据宽高滑块取当前buffer的某个范围数据 然后inti_qtablewidget()显示出来 就i做到实时显示 的效果了

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值