首页 > 其他 > 详细

界面控制截图

时间:2014-03-27 17:24:17      阅读:357      评论:0      收藏:0      [点我收藏+]

2014-03-27

bubuko.com,布布扣
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 25 13:06:27 2014

@author: lxx
"""

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 24 15:38:06 2014

@author: lxx
"""
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 24 10:32:59 2014

@author: lxx
"""
import wx
import cv2
import  os

global events
global image

global startPointx   
global startPointy   
global flagDraw
global i

global data 


filename="jiangnan.jpg"
txtname1="Pindata.txt"
txtname2="Holedata.txt"
image = cv2.imread(filename) 


class InsertFrame(wx.Frame): 
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "Frame With Button",size=(300, 300))
        panel = wx.Panel(self) #创建画板   
        button1 = wx.Button(panel, label="image_scr", pos=(100, 10), size=(100, 50))
        self.Bind(wx.EVT_BUTTON,self.Image_scr,button1)  
        button2 = wx.Button(panel, label="Cancel_img", pos=(100, 60), size=(100, 50))
        self.Bind(wx.EVT_BUTTON,self.Cancel_img,button2)                
        button3 = wx.Button(panel, label="Pin_data", pos=(100,110), size=(100, 50))
        self.Bind(wx.EVT_BUTTON,self.Pin_data,button3)
        button4 = wx.Button(panel, label="Hole_data", pos=(100,160), size=(100, 50))
        self.Bind(wx.EVT_BUTTON,self.Hole_data,button4)
        

    def Image_scr(self, event): 
        global data
        global startPointx   
        global startPointy   
        global flagDraw
        global i
        global image
        data=[]
#        image = cv2.imread(filename)   
        i=0   
        startPointx = 0  
        startPointy = 0  
        flagDraw = False
        cv2.namedWindow("rectangle",cv2.WINDOW_NORMAL)
        #cv2.namedWindow("rectangle_1",cv2.WINDOW_NOR
        cv2.imshow(rectangle,image)
        show_img=cv2.imshow(rectangle,image)          
        def onMouseEvent(event,x,y,flags,param):  
            global startPointx     
            global startPointy   
            global flagDraw
            global i
        #鼠标左键按下响应   
            if(event==1):  #第一点
                print "Position is: %d,%d" ,x,y             
                startPointx = x
                startPointy = y  
                i=i+1
                cv2.putText(image,str(i),(startPointx,startPointy),2,1,(249,99,201))
                #标数字
                flagDraw = True                    
                a = str(x)
                b = str(y)
                data.append(a)
                data.append(b)
                   
            #鼠标移动响应   
            if(event==0):  #滑动过程
                if(flagDraw==True): 
                    imgc = cv2.copyMakeBorder(image,0,0,0,0,cv2.BORDER_CONSTANT)
                    #画矩形框
                    cv2.rectangle(imgc, (startPointx,startPointy), (x,y), (249,99,201),2)
                    #cv2.putText(imgc,(x,y),CV_FONT_HERSHEY_PLAIN,2.0,(255,0,0),thickness = 2)    
                    cv2.imshow(rectangle, imgc)                
#                    print "EndPosition is: %d,%d" ,x,y  
                    
                    
            #鼠标左键抬起响应  
            if(event==4):   #第二点
                if(flagDraw==True):  
                    cv2.rectangle(image, (startPointx,startPointy), (x,y), (249,99,201),2)  
                    #cv2.imshow(‘rectangle_1‘, image)                
                    flagDraw = False
                    print "EndPosition is: %d,%d" ,x,y  
                    c = str(x)
                    d = str(y)
                    data.append(c)
                    data.append(d)

        cv2.setMouseCallback(rectangle, onMouseEvent)
        cv2.waitKey()

    def Cancel_img(self,events):
        global data
        global i
        global image
        image = cv2.imread(filename)
        del data[-1]
        del data[-1]
        del data[-1]
        del data[-1]
        i=i-1
        if len(data)>0:
            a=[]
            b=[]
            for eachline in data:
                eachline=eachline.strip()
                eachline=eachline.split("   ") 
                for k in eachline:        
                    k=str(k)
                    b.append(k)
                    if len(b)==4:
                        a.append(b)
                        b=[]
            ii=0
            for q in a:
                xa=int(q[0])
                ya=int(q[1])
                xb=int(q[2])
                yb=int(q[3])
                ii=ii+1
                if i==0:
                   ii=1                                                                 
                #创造新的图片,将坐标写进去
                cv2.rectangle(image, (xa,ya),(xb,yb),(249,99,201),2)                
                cv2.putText(image,str(ii),(xa,ya),2,1,(249,99,201)) 
                cv2.imshow(rectangle, image)
        else:
            cv2.imshow(rectangle, image)

    def Pin_data(self,events):
        global data
        l=open(txtname1,w)
        f=open(txtname1,r)
        i_mg = cv2.imread(filename)
        cv2.destroyAllWindows()
#        data=str(data)
        a=[]
        b=[]
        for eachline in data:
            eachline=eachline.strip()
            eachline=eachline.split(",") 
            for k in eachline:        
                k=str(k)
                b.append(k)
                if len(b)==4:
                    a.append(b)
                    b=[] 
        i=0
        for picture in a :        
            x = int(picture[0])
            y = int(picture[1])
            w = int(picture[2])
            h = int(picture[3])
            i+=1
            I_mg = i_mg[y:h,x:w]    
            c = cv2.imwrite(str(i)+"Pin.BMP", I_mg)
        for z in a:
            for p in z :
                p=str(p)
                l.write(p)
                l.write("   ")
            l.write("\n")        
        l.close()
        f.close()
        
    def Hole_data(self,events):
        global data
        l=open(txtname2,w)
        f=open(txtname2,r)
        i_mg = cv2.imread(filename)
        cv2.destroyAllWindows()
#        data=str(data)
        a=[]
        b=[]
        for eachline in data:
            eachline=eachline.strip()
            eachline=eachline.split(",") 
            for k in eachline:        
                k=str(k)
                b.append(k)
                if len(b)==4:
                    a.append(b)
                    b=[] 
        i=0
        for picture in a :        
            x = int(picture[0])
            y = int(picture[1])
            w = int(picture[2])
            h = int(picture[3])
            i+=1
            I_mg = i_mg[y:h,x:w]    
            c = cv2.imwrite(str(i)+"Hole.BMP", I_mg)
        for z in a:
            for p in z :
                p=str(p)
                l.write(p)
                l.write("   ")
            l.write("\n")        
        l.close()
        f.close()
        
        

if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = InsertFrame(parent=None, id=-1)
    frame.Show()
    app.MainLoop() 
    
    
bubuko.com,布布扣

用界面控制程序的操作,可以截图,保存数据,也可以后退

出现的问题以及解决:

1.  刚开始按照之前的滑鼠直接粘帖过来,之前是由键盘控制窗口的退出的,然后转为用界面控制之后,控制不了,一直跳不出滑鼠的循环,经过普霖的指点,不要用循环,因为每次滑一次而已,而且,用另外一个按键控制窗口的关闭,控制窗口关闭的是cv2.destroyAllWindows()。

2.。保存数据:因为按键与按键之间是并列关系的,不能互相关连,所以保存数据的时候保存不了。然后马麟叫我将数据data做成全局变量,然后解决了.

3..在画图后退这一部分,刚开始是可以口退了,当又重新画的时候,之前删去的又全部都出来了,结果是因为虽然image做了全局变量,但是在下面(后退的那部分)没有再次标明image是全局变量。要在每一个用到全局变量的地方再次用global image。

界面控制截图,布布扣,bubuko.com

界面控制截图

原文:http://www.cnblogs.com/heizaiaha/p/3627518.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!