there are 2 files. This one is 'opencvLineDetect.py' , which is the main file & gui.
import cv2 import numpy as np import sys from PySide.QtCore import * from PySide.QtGui import * from PySide import QtGui from PySide import QtCore from math import * from CVLineDetection import CVLineDetection imgPath01 = ['PlanSK_XS.jpg','dummy','dummy'] imgPath02 = 'temp.jpg' pixelScale = 350 sliderMax = 200 sliderMin = 1 class LineDetection(QtGui.QWidget): def __init__(self): super(LineDetection, self).__init__() self.pixel = 1 self.threshold=40 self.minLineLength=5 self.maxLineGap=30 self.initUI() def initUI(self): #imgPath01 = 'PlanSK_S.jpg' #imgPath02 = 'temp.jpg' self._CVLineDetection = CVLineDetection(imgPath01[0]) self._CVLineDetection.updateImage(imgPath01[0],self.pixel,self.threshold,self.minLineLength,self.maxLineGap) #labelSliderTxt = QtGui.QLabel('Sliders Left to Right: Pixel, Threshold, MinLineLength, maxLineGap', self) fbButton = QtGui.QPushButton("Choose File") fbButton.clicked.connect(self.pickFile) self.slider01TopTxt = QtGui.QLabel('Pixel',self) self.slider02TopTxt = QtGui.QLabel('Threshold',self) self.slider03TopTxt = QtGui.QLabel('MinLineLength',self) self.slider04TopTxt = QtGui.QLabel('MaxLineGap',self) self.slider01TopLcd = QtGui.QLCDNumber(self) self.slider01TopLcd.setSegmentStyle(QtGui.QLCDNumber.Flat) self.slider01TopLcd.display(self.pixel) self.slider02TopLcd = QtGui.QLCDNumber(self) self.slider02TopLcd.setSegmentStyle(QtGui.QLCDNumber.Flat) self.slider02TopLcd.display(self.threshold) self.slider03TopLcd = QtGui.QLCDNumber(self) self.slider03TopLcd.setSegmentStyle(QtGui.QLCDNumber.Flat) self.slider03TopLcd.display(self.minLineLength) self.slider04TopLcd = QtGui.QLCDNumber(self) self.slider04TopLcd.setSegmentStyle(QtGui.QLCDNumber.Flat) self.slider04TopLcd.display(self.maxLineGap) #change pixel self.slider = QtGui.QSlider(QtCore.Qt.Vertical) self.slider.setFocusPolicy(QtCore.Qt.StrongFocus) self.slider.setTickPosition(QtGui.QSlider.TicksBothSides) self.slider.setTickInterval(10) self.slider.setSingleStep(1) self.slider.setValue(self.pixel) self.slider.setMaximum(sliderMax) self.slider.setMinimum(sliderMin) self.slider.valueChanged.connect(self.slider01TopLcd.display) self.slider.valueChanged.connect(self.refreshImage) self.slider02 = QtGui.QSlider(QtCore.Qt.Vertical) self.slider02.setFocusPolicy(QtCore.Qt.StrongFocus) self.slider02.setTickPosition(QtGui.QSlider.TicksBothSides) self.slider02.setTickInterval(10) self.slider02.setSingleStep(1) self.slider02.setValue(self.threshold) self.slider02.setMaximum(sliderMax) self.slider02.valueChanged.connect(self.slider02TopLcd.display) self.slider02.valueChanged.connect(self.refreshImage) self.slider03 = QtGui.QSlider(QtCore.Qt.Vertical) self.slider03.setFocusPolicy(QtCore.Qt.StrongFocus) self.slider03.setTickPosition(QtGui.QSlider.TicksBothSides) self.slider03.setTickInterval(10) self.slider03.setSingleStep(1) self.slider03.setValue(self.minLineLength) self.slider03.setMaximum(sliderMax) self.slider03.valueChanged.connect(self.slider03TopLcd.display) self.slider03.valueChanged.connect(self.refreshImage) self.slider04 = QtGui.QSlider(QtCore.Qt.Vertical) self.slider04.setFocusPolicy(QtCore.Qt.StrongFocus) self.slider04.setTickPosition(QtGui.QSlider.TicksBothSides) self.slider04.setTickInterval(10) self.slider04.setSingleStep(1) self.slider04.setValue(self.maxLineGap) self.slider04.setMaximum(sliderMax) self.slider04.valueChanged.connect(self.slider04TopLcd.display) self.slider04.valueChanged.connect(self.refreshImage) vboxSlider01 = QtGui.QVBoxLayout() vboxSlider01.addStretch(0) vboxSlider01.addWidget(self.slider01TopTxt) vboxSlider01.addWidget(self.slider01TopLcd) vboxSlider01.addWidget(self.slider) vboxSlider02 = QtGui.QVBoxLayout() vboxSlider02.addStretch(0) vboxSlider02.addWidget(self.slider02TopTxt) vboxSlider02.addWidget(self.slider02TopLcd) vboxSlider02.addWidget(self.slider02) vboxSlider03 = QtGui.QVBoxLayout() vboxSlider03.addStretch(0) vboxSlider03.addWidget(self.slider03TopTxt) vboxSlider03.addWidget(self.slider03TopLcd) vboxSlider03.addWidget(self.slider03) vboxSlider04 = QtGui.QVBoxLayout() vboxSlider04.addStretch(0) vboxSlider04.addWidget(self.slider04TopTxt) vboxSlider04.addWidget(self.slider04TopLcd) vboxSlider04.addWidget(self.slider04) #first image pixmap01 = QtGui.QPixmap(imgPath01[0]) pixmap01 = pixmap01.scaled(pixelScale, pixelScale, QtCore.Qt.KeepAspectRatio) self.imageLable01 = QtGui.QLabel(self) self.imageLable01.setPixmap(pixmap01) #second image pixmap02 = QtGui.QPixmap(imgPath02) pixmap02 = pixmap02.scaled(pixelScale, pixelScale, QtCore.Qt.KeepAspectRatio) self.imageLable02 = QtGui.QLabel(self) self.imageLable02.setPixmap(pixmap02) #add image lable to horizontal box layout hbox01 = QtGui.QHBoxLayout() hbox01.addStretch(1) hbox01.addWidget(self.imageLable01) hbox01.addWidget(self.imageLable02) hbox01.addLayout(vboxSlider01) hbox01.addLayout(vboxSlider02) hbox01.addLayout(vboxSlider03) hbox01.addLayout(vboxSlider04) hbox = QtGui.QHBoxLayout() hbox.addStretch(1) #hbox.addWidget(labelSliderTxt) hbox.addWidget(fbButton) vbox = QtGui.QVBoxLayout() vbox.addStretch(1) vbox.addLayout(hbox01) # add sliders vbox.addLayout(hbox) self.setLayout(vbox) self.setGeometry(300, 300, 300, 150) self.setWindowTitle('OpenCV PythonSide Line Detection') self.show() def pickFile(self): global imgPath01 imgPath01 = QtGui.QFileDialog.getOpenFileName(self,'Open File',"~/","Images (*.png *.jpg)") print imgPath01 self.refreshImage() pass def refreshImage(self): global imgPath01 self.pixel = self.slider01TopLcd.intValue() self.threshold = self.slider02TopLcd.intValue() self.minLineLength = self.slider03TopLcd.intValue() self.maxLineGap = self.slider04TopLcd.intValue() self._CVLineDetection.updateImage(imgPath01[0],self.pixel,self.threshold,self.minLineLength,self.maxLineGap) pixmap01 = QtGui.QPixmap(imgPath01[0]) pixmap01 = pixmap01.scaled(pixelScale, pixelScale, QtCore.Qt.KeepAspectRatio) #self.imageLable02 = QtGui.QLabel(self) self.imageLable01.setPixmap(pixmap01) pixmap02 = QtGui.QPixmap(imgPath02) pixmap02 = pixmap02.scaled(pixelScale, pixelScale, QtCore.Qt.KeepAspectRatio) #self.imageLable02 = QtGui.QLabel(self) self.imageLable02.setPixmap(pixmap02) pass def keyPressEvent(self,event): if event.key() == Qt.Key_Escape: self.close() def main(): app = QtGui.QApplication(sys.argv) ex = LineDetection() sys.exit(app.exec_()) if __name__ == '__main__': main()
below is the second file ' CVLineDetection.py'
import cv2 import numpy as np class CVLineDetection(object): def __init__(self, image01Path01): pass def updateImage(self,image01Path,threshold,minLineLength1,maxLineGap1): self.im = cv2.imread(image01Path) self.gray = cv2.cvtColor(self.im,cv2.COLOR_BGR2GRAY) self.edges = cv2.Canny(self.gray,150,200,apertureSize = 3) self.img = self.im.copy() self.lines = cv2.HoughLinesP(self.edges,1,np.pi/360,threshold, minLineLength=minLineLength1, maxLineGap=maxLineGap1) for x1,y1,x2,y2 in self.lines[0]: cv2.line(self.img,(x1,y1),(x2,y2),(0,255,0),2) cv2.imwrite('temp.jpg',self.img)