用鼠标框选图片感兴趣区域并提取灰度直方图

本文介绍了一个使用OpenCV通过鼠标选取图片感兴趣区域,并从中提取灰度直方图的程序。作者作为CV初学者,希望通过这个工具进行局部特征分析,程序基于opencv2.4.3和VS2010。文章提供了相关代码资源的下载链接。
摘要由CSDN通过智能技术生成

         用鼠标框选图片感兴趣区域并提取灰度直方图

                                           Jun.L
                   http://blog.csdn.net/jingjun1822

    最近看了很多提取边缘局部特征的文章,包括Hog,Snake等等,会在这段时间内分享我的阅读心得。CV刚刚接触不久,基础薄弱,见识短浅。简直是要理论没理论,要代码没代码。不过既然在做了就不能急躁,应该静下心来,扎扎实实地走好每一步。因为是初学者,理论分析不到位或者代码有误的地方,前辈们看到了还望不吝赐教,在此先谢过了。

    为了做一些局部特征的分析,我把以前所编的用鼠标提取图片感兴趣区域并提取灰度直方图的opencv程序拿了出来,打算把它改造成提取一些局部特征的工具。程序运行环境opencv2.4.3+VS2010。参考资料OpenCV2 Computer Vision Application Programmming Cookbook是一本学习opencv2.0系列的C++接口的好书。

使用PyQt可以很容易地实现鼠标框选图片的功能。下面是一个简单的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel from PyQt5.QtGui import QPixmap, QPainter, QPen, QColor from PyQt5.QtCore import Qt, QPoint class MainWindow(QMainWindow): def __init__(self): super().__init__() self.image_path = 'image.jpg' # 图片的路径 self.selected_area = None # 选中区域的坐标 self.start_pos = None # 框选起始点的坐标 self.end_pos = None # 框选结束点的坐标 self.image_label = QLabel(self) self.pixmap = QPixmap(self.image_path) self.image_label.setPixmap(self.pixmap) def paintEvent(self, event): super().paintEvent(event) if self.selected_area: painter = QPainter(self) painter.setPen(QPen(QColor(255, 0, 0), 2, Qt.SolidLine)) painter.drawRect(self.selected_area) def mousePressEvent(self, event): if event.buttons() == Qt.LeftButton: self.start_pos = event.pos() def mouseMoveEvent(self, event): if event.buttons() == Qt.LeftButton and self.start_pos: self.end_pos = event.pos() self.update() def mouseReleaseEvent(self, event): if event.button() == Qt.LeftButton and self.start_pos and self.end_pos: self.selected_area = self.calculate_selected_area() self.start_pos = None self.end_pos = None self.update() def calculate_selected_area(self): x = min(self.start_pos.x(), self.end_pos.x()) y = min(self.start_pos.y(), self.end_pos.y()) width = abs(self.start_pos.x() - self.end_pos.x()) height = abs(self.start_pos.y() - self.end_pos.y()) return QRect(x, y, width, height) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了一个名为MainWindow的类,继承自QMainWindow类,并重写了几个函数。其中,paintEvent函数用于绘制选中的区域,mousePressEvent函数用于记录鼠标框选起始点的坐标,mouseMoveEvent函数用于记录鼠标框选结束点的坐标并进行更新,mouseReleaseEvent函数用于计算并记录选中区域的坐标。 通过运行这段代码,我们可以看到一张图片窗口,可以使用鼠标来进行框选操作。当用鼠标左键按下并移动时,会实时显示出框选区域的红色矩形框。当释放鼠标左键时,selected_area变量会保留框选区域的坐标信息,并将其绘制在图片上。需要注意的是,要使用正确的图片路径,以显示您自己的图片。 这就是使用PyQt实现鼠标框选图片的一个简单示例。您可以根据实际需要进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值