Теперь я решил познакомиться с Highgui частью (хотя в реалиях новой версии, это наполовину core часть)
Программа №1 - реализация кнопок в OpenCV
Программа №2 - рисуем всякие штучки на картинке
Программа №1 - реализация кнопок в OpenCV
import cv
def main():
cv.ShowImage('Main',img1)
cv.CreateTrackbar('Change Picture','Main',val,1,switcher)
return 0
def switcher(pos):
if pos == 0:
cv.ShowImage('Main',img1)
else:
cv.ShowImage('Main',img2)
if __name__ == '__main__':
img1 = cv.LoadImage('1.jpg')
img2 = cv.LoadImage('2.bmp')
val=0
main()
cv.WaitKey(0)
Коментарии - т.к. в OpenCV нету кнопок, то для этого применяется ползунок, с 2 возможными значениями.Программа №2 - рисуем всякие штучки на картинке
import cv,numpy
class Painter:
def __init__(self, windowname, dests):
self.prev_pt = None
self.windowname = windowname
self.dests = dests
cv.SetMouseCallback(self.windowname, self.on_mouse)
def on_mouse(self, event, x, y, flags, param):
pt = (x, y)
if event == cv.CV_EVENT_LBUTTONUP or not (flags &
cv.CV_EVENT_FLAG_LBUTTON):
self.prev_pt = None
if event == cv.CV_EVENT_LBUTTONDOWN:
self.prev_pt = pt
if event == cv.CV_EVENT_MOUSEMOVE and (flags &
cv.CV_EVENT_FLAG_LBUTTON) :
if self.prev_pt:
cv.Line(self.dests, self.prev_pt, pt,
cv.ScalarAll(255), 5, 8, 0)
self.prev_pt = pt
class Boxes:
def __init__(self, windowname, image):
self.box = [-1,-1,0,0]
self.prev_pt = None
self.dests = image
self.windowname = windowname
cv.SetMouseCallback(self.windowname, self.on_mouse)
def draw_box(self):
cv.Rectangle(self.dests,(self.box[0],self.box[1]),
(self.box[0]+self.box[2],self.box[1]+self.box[3]),
cv.Scalar(0x00,0x00,0xff),5)
def on_mouse(self, event, x, y, flags, param):
if event == cv.CV_EVENT_MOUSEMOVE and (flags &
cv.CV_EVENT_FLAG_LBUTTON):
self.box[2] = x - self.box[0]
self.box[3] = y - self.box[1]
if event == cv.CV_EVENT_LBUTTONDOWN:
self.box = [x,y,0,0]
if event == cv.CV_EVENT_LBUTTONUP:
drawing_box == False
if self.box[2] < 0:
self.box[0] = self.box[0] + self.box[2]
self.box[2] = -1
if self.box[3] < 0:
self.box[1] = self.box[1] + self.box[3]
self.box[3] = -1
self.draw_box()
def main():
sk = None
bx = None
img = cv.LoadImage('1.jpg')
imgClear = cv.CloneImage(img)
while True:
cv.ShowImage("image", img)
c = cv.WaitKey(10)
if c == 27:
break
elif c == ord('r'):
print 'refresh image'
cv.ShowImage("image", imgClear)
img = cv.CloneImage(imgClear)
if sk:
sk = Painter("image", img)
print 'drawing lines'
if bx:
bx = Boxes("image", img)
print 'drawing boxes'
elif c == ord('l'):
bx = None
sk = Painter("image", img)
print 'drawing lines'
elif c == ord('t'):
cv.Rectangle(img, (1, 1), (1, 1),
cv.Scalar(0x00, 0x00, 0xff), 5)
elif c == ord('b'):
sk = None
bx = Boxes("image", img)
print 'drawing boxes'
if __name__ == '__main__':
drawing_box = False
print "Help:"
print "\tpress 'l' to draw lines"
print "\tpress 'b' to draw boxes"
print "\tpress 'r' to refresh image"
print "\tpress 't' to draw test Rectangle"
print "\tpress 'Esc' to exit"
main()
Коментарии - тут все просто, рисуем как карандашом, или квадратики (они рисуются только в 1 сторону, моей целью не было правильное рисование, но работа с прослушиванием действий мыши)
Комментариев нет:
Отправить комментарий