PyQt写的简单图像标注工具
来源:互联网 发布:js 百度地图样式修改 编辑:程序博客网 时间:2024/06/05 20:59
#coding:utf-8from PyQt4 import QtGuiimport sysimport cv2 as cvimport os#全局变量,图像文件夹路径imgPath = "F:/Pictures/"#全局变量,结果存放变量ptRslt = []#图像标记类class Mark(QtGui.QWidget): def __init__(self): super(Mark,self).__init__() #左上角点100,100, 宽高1000,900, 可自己设置,未利用布局 self.setGeometry(100,100,1000,900) self.setWindowTitle("Mark") #窗口标题 self.initUI() def initUI(self): self.labelR = QtGui.QLabel(u'缩放比例:', self) #label标签 self.labelR.move(200, 20) #label标签坐标 self.editR = QtGui.QLineEdit(self) #存放图像缩放的比例值 self.editR.move(250,20) #编辑框坐标 self.buttonSave = QtGui.QPushButton(u"保存结果", self) #保存按钮 self.buttonSave.move(400,20) #保存按钮坐标 self.buttonSave.clicked.connect(self.buttonClick) #保存按钮关联的时间 self.allFiles = QtGui.QListWidget(self) #列表框,显示所有的图像文件 self.allFiles.move(10,40) #列表框坐标 self.allFiles.resize(180,700) #列表框大小 allImgs = os.listdir(imgPath) #遍历路径,将所有文件放到列表框中 for imgTmp in allImgs: self.allFiles.addItem(imgTmp) print self.allFiles.count() #打印列表框文件数,没有作用 self.allFiles.itemClicked.connect(self.itemClick) #列表框关联时间,用信号槽的写法方式不起作用 self.labelImg = QtGui.QLabel("testImage", self) # 显示图像的标签 self.labelImg.move(200,70) #显示图像标签坐标 self.labelImg.resize(700,800) #显示图像标签大小,图像按照宽或高缩放到这个尺度 def mousePressEvent(self, QMouseEvent): #鼠标单击事件 fr = float(self.editR.text()) # 读取缩放比例 pointT = QMouseEvent.pos() # 获得鼠标点击处的坐标 ptRslt.append(int( (pointT.x()-200)/fr + 0.5)) #将当前点击的坐标放到全局变量中 ptRslt.append(int((pointT.y()-70)/fr+0.5) ) # 减去图像标签的左上角坐标,再除以缩放比例,得到图像真实点坐标 def itemClick(self): #列表框单击事件 tmp = imgPath + self.allFiles.currentItem().text() #图像的绝对路径 imgOri = cv.imread(str(tmp),1) #读取图像 height = imgOri.shape[0] #图像高度 ratioY = self.labelImg.height()/(height+0.0) #按高度值缩放 self.editR.setText(str(ratioY)) # 编辑框记录缩放值 width = imgOri.shape[1] # 计算图像宽度,缩放图像 height2 = self.labelImg.height() width2 = int(width*ratioY + 0.5) img2 = cv.resize(imgOri, (width2, height2)) cv.imwrite("F:/tmp.jpg", img2) # 将图像保存到本地 #注释的三行,是对mat类型的图像进行转换,也可显示。但部分图像出现了错误,所以采用硬盘存取的方式,虽然笨拙,但是没错误 # img3 = cv.cvtColor(img2, cv.COLOR_BGR2RGB) # qImg = QtGui.QImage(img3.tostring(), width2, height2, QtGui.QImage.Format_RGB888) # # self.labelImg.setPixmap(QtGui.QPixmap(qImg)) qImgT = QtGui.QPixmap("F:/tmp.jpg") #读取本地的图像 self.labelImg.setPixmap(qImgT) #标签显示图像 def buttonClick(self): #保存按钮事件 nameT = str(self.allFiles.currentItem().text()) #获得列表框名称 name = nameT[0:-3] + "txt" #名称改为txt file = open("F:/" + name, "w") # 打开文本,进行写操作 nId = 0 #点集的索引,循环用到 global ptRslt # 此处用到了全局变量标志,不用好像会出错,也不太明白 while nId<len(ptRslt): #循环写入点 xt = ptRslt[nId] yt = ptRslt[nId+1] file.write(str(xt) + " " + str(yt) + "\n") nId = nId + 2 file.close() ptRslt = [] # 保存之后,将结果集置空if __name__ == "__main__": # main函数 app = QtGui.QApplication(sys.argv) mark = Mark() mark.show() sys.exit(app.exec_())
代码说明:
本程序比较简单,使用PyQt实现,主要点是列表框显示所有文件,一个label标签显示图像,鼠标单击事件获得点坐标。如果要使用的话,在程序中删除所有的汉字,再更改成自己的图像路径和保存文本的路径,应该就可以了。注意main部分,下划线之间不应有控制,应该是编辑器问题,不能正确显示。
如下图所示,五个主要的部件,用红色方框标出了。 程序简单思路,点击列表框的图像,获得缩放比例,图像名称,然后通过名称将图像显示到图像标签,然后点集图像,进行简单的坐标转换,将坐标点集保存到文本中。
阅读全文
0 0
- PyQt写的简单图像标注工具
- 自写图像标注工具 QT+Opencv
- 图像标注工具
- 图像分割标注工具labelme
- 基于MFC和OpenCV的图像标注工具
- 图像的区域标注
- 用java的swing写了个图片标注工具
- 一个用于图像标注的简单Web程序
- python使用pyqt写带界面工具
- 图像标注教程(使用LabelImg标注工具)
- Python的图形界面工具----PyQt
- Mac安装图像标注工具labelImg
- [PyQt] Python+PyQt4 写的有一点仿Window自带的看图工具
- PyQt汇率兑换工具实现的代码,需要引用上一节写的DataMake类
- PyQt&opencv 图像处理(4):简单的逐点图像操作vignette(晕影滤镜)
- 推荐的自动标注工具
- [PyQt] PyQt4写的音乐播放器
- 基于PYQT的MQTT协议测试工具
- kafka 零基础 实战
- ACM暑假集训日记 17.8.15 树状数组
- 监控利器Zabbix3.2.7之安装部署实践
- 数据分页(Sql Server)版
- 数据预处理
- PyQt写的简单图像标注工具
- python爬虫学习第二十二天
- HDUOJ 1421 搬寝室
- spring实战-参数传递,表单处理及表单校验
- 自定义控件 渐变色的TextView
- 手把手教你把Vim改装成一个IDE编程环境(图文) -- 续1
- HDU 4609 3-idiots (FFT)
- 采用行为树快速开发游戏AI
- CodeForces 305A Strange Addition(思维题)