Пример #1
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        #界面部分
        self.setWindowTitle('FittingLine Tool')
        #基础数据部分
        self.set_base_data()

        #Item 部分设置
        self.set_item()

        #结果数据部分
        self.output_result()
        #连接信号与槽

        # 数据部分
        self.state = State.Idle.value
        # self.rect= myRect(myPoint(40,40),10,20,myPoint(1,0))
        self.src_img = None
        self.line = myLine(myPoint(50, 50), myPoint(150, 150))
        self.line_item = FindLineItem(self.line)
        self.operator = FittingLineOperator()
        self.line_item.setZValue(100)
        self.points_item = None
        self.file_name = None
        self.rects = list()
        self.connect_UI()
Пример #2
0
 def __init__(self,point1,point2,point3):
     line12=myLine(point1,point2)
     line23=myLine(point2,point3)
     if line12.is_parallel_to(line23):
         print('3 points in one line')
         return
     mid_point12 = (point1 + point2) * 0.5
     mid_point23 = (point2 + point3) * 0.5
     gradient12 = (point2.y - point1.y) / (point2.x - point1.x)
     gradient23 = (point3.y - point2.y) / (point3.x - point2.x)
     gradient1=-1/gradient12
     gradient2=-1/gradient23
     denominator=gradient2-gradient1
     nominator=mid_point12.y-(gradient1*mid_point12.x)+(gradient2*mid_point23.x)-mid_point23.y
     center_x=nominator/denominator
     center_y=gradient1*(center_x-mid_point12.x)+mid_point12.y
     self.center=myPoint(center_x,center_y)
     self.radius=self.center.distance_to(point1)
     self.area = self.radius* self.radius * math.pi
     self.circumference = 2 * self.radius * math.pi
Пример #3
0
    def Ransac(self):
        iter = 0
        while iter < self.iter:
            chose_index1 = numpy.random.randint(0, len(self.points))
            chose_index2 = numpy.random.randint(0, len(self.points))
            self.temp_line = myLine(self.points[chose_index1],
                                    self.points[chose_index2])
            self.temp_ok_points.clear()
            self.temp_ng_points.clear()
            self.temp_dist = 0
            for j in range(len(self.points)):
                dist = self.temp_line.to_point(self.points[j])
                self.temp_dist = dist + self.temp_dist
                if dist < self.thresh:
                    self.temp_ok_points.append(self.points[j])
                else:
                    self.temp_ng_points.append(self.points[j])

            if len(self.temp_ok_points) == len(self.ok_points):
                if self.temp_dist < self.dist:
                    self.dist = self.temp_dist
                    print(self.dist)
                    self.ok_points.clear()
                    self.ng_points.clear()
                    self.line = self.temp_line
                    self.ok_points = self.temp_ok_points.copy()
                    self.ng_points = self.temp_ng_points.copy()
            if len(self.temp_ok_points) > len(self.ok_points):
                #self.k=math.log(0.0001)/math.log(1-pow(len(self.ok_points)/len(self.points),2))
                self.ok_points.clear()
                self.ng_points.clear()
                self.line = self.temp_line
                self.ok_points = self.temp_ok_points.copy()
                self.ng_points = self.temp_ng_points.copy()
            #if self.i<self.k:
            #   break
            if len(self.ng_points) < self.delete_count:
                temp_count = self.delete_count - len(self.ng_points)
                #self.Delete_Points(self.ok_points,self.ng_points,temp_count)
            iter += 1
        print('dist:', self.temp_dist)
        #print(len(self.ok_points))
        if len(self.ok_points) > self.min_count:
            #if self.delete_count>len(self.ng_points):
            self.Delete_Points(self.ok_points, self.ng_points,
                               self.delete_count)
            return self.ok_points, self.ng_points, self.line
        else:
            print('not enough points')
Пример #4
0
        x_ration = self.view.viewport().width() / scene_rect.width()
        y_ration = self.view.viewport().height() / scene_rect.height()
        if x_ration < y_ration:
            y_ration = x_ration
        trans.scale(y_ration, y_ration)
        self.view.reset_view()
        self.view.setTransform(trans)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    #window=ViewWidget()
    #window.show()
    point1 = myPoint(40, 50)
    width = 50
    height = 30
    dir = myPoint(3, 4)
    rect = myRect(point1, width, height, dir)
    circle = myCircle(myPoint(50, 50), 20)
    line = myLine(myPoint(50, 50), myPoint(146, 50))
    rect_item = RectItem(rect)  #RectItem(rect)
    circle_item = FindCircleItem(circle)
    view_widget = ViewWidget()
    img = QImage("../image/cv_team.jpg")
    view_widget.set_image(img)
    view_widget.add_item(rect_item)
    view_widget.add_item(circle_item)
    view_widget.show()
    view_widget.resize(800, 600)
    #window.showMaximized()
    app.exec()