wxPython的位图显示看起来很扭曲

问题描述

一个问题在这里,请保持友善

我已阅读了大多数相关问题,并设法解决了大多数问题。这里有很多很好的信息。

  • Python 3.7
  • wxPython 4.0.4
  • gtk2(凤凰)
  • wxWidgets 3.0.5

我的技能:从gwBasic开始编程,但是初学者使用Python(3个月),并且使用wxPython进行noobie(1周)

我正在尝试使用wx.StaticBitmap显示来自摄像机(1270x720)的图像。该GUI是使用wxFormBuilder创建的,然后进行了修改以满足我的需要。这一切都要感谢这里的许多人。我已经完成了大部分该应用程序的工作并可以使用OpenCV进行工作,但是现在GUI变得比我以前要困难得多。

我终于可以显示图像了,但是当水平保持消失时,它看起来就像是旧电视。我在同一函数中使用cv2.imshow()来表示图像有效并且显示良好。

image display screenshot

初始化小部件的代码部分:

class fullFrame ( wx.Frame ):

def __init__(self,parent,id,iframe,**kwargs):
    wx.Frame.__init__ ( self,id = wx.ID_ANY,title = wx.EmptyString,pos = wx.DefaultPosition,size = wx.Size( 1612,800 ),style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
    ## ** Updated SetSizeHintsSz to SetSizeHints
    self.SetSizeHints( wx.DefaultSize,wx.DefaultSize )

    fullSizer = wx.BoxSizer( wx.HORIZONTAL )

    imgSizer = wx.BoxSizer( wx.VERTICAL )

    self.pnl = wx.Panel( self,wx.ID_ANY,wx.DefaultPosition,wx.DefaultSize,wx.TAB_TRAVERSAL )
    self.pnl.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_INFOBK ) )
    self.pnl.SetMinSize( wx.Size( 1280,720 ) )
    ########### ** ###########
    ## Added image controls ##
    ########### ** ###########
    self.Ready = False
    self.iframe = iframe
    self.imageSize = (1280,720)
    self.vBox = wx.BoxSizer(wx.VERTICAL)
    ## ** Updated wx.EmptyImage to wx.Image
    self.image = wx.Image(self.imageSize[0],self.imageSize[1])
    ## ** Updated wx.BitmapFromImage to wx.Bitmap
    self.imageBit = wx.Bitmap(self.image)
    self.staticBit = wx.StaticBitmap(self.pnl,self.imageBit)

    self.vBox.Add(self.staticBit)
    self.height,self.width = iframe.shape[:2]
    self.bmp = wx.Bitmap.FromBuffer(self.height,self.width,iframe)
    self.set_image()
    self.Ready = True

    ########### ** ###########
    ## End image controls ##
    ########### ** ###########

    imgSizer.Add( self.pnl,1,wx.EXPAND |wx.ALL,5 )


    fullSizer.Add( imgSizer,wx.EXPAND,5 )

图像更新功能

    ## ** Added function to diplay image
def set_image(self):
    newframe = cv2.cvtColor(self.iframe,cv2.COLOR_BGR2RGB)
    self.bmp.copyFromBuffer(newframe)
    self.staticBit.SetBitmap(self.bmp)
    self.Refresh()
    cv2.imshow('Actual with OpenCV2',self.iframe)

此外,位图似乎仅占面板的一半,而完整图像则由OpenCV显示。我以为也许我的height和width变量颠倒了,但是当我尝试交换它们时,问题就变成了水平问题。无论哪种方式,它只能填充1280个像素中的720个。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)