Exemplo n.º 1
0
    def ai_delete_outline(self, detect_policy):

        result_numpy_array = None
        width_num_array = None

        if not self._selection_item:
            image = self._image
        else:
            image = self._image.copy(self._selection_item.rectangle())

        if detect_policy == 5:
            for h in range(0, image.height(), 256):
                for w in range(0, image.width(), 256):
                    image_ = self._image.copy(QRect(w, h, 255, 255))
                    image_ = qimage2numpy(image_)
                    result = detect_one(image_)
                    numpy_array = mat_to_img(result)
                    if width_num_array is not None:
                        width_num_array = np.hstack(
                            (width_num_array, numpy_array))
                    else:
                        width_num_array = numpy_array

                if result_numpy_array is not None:
                    result_numpy_array = np.vstack(
                        (result_numpy_array, width_num_array))
                else:
                    result_numpy_array = width_num_array
                width_num_array = None

            print(result_numpy_array.shape)
            return result_numpy_array
Exemplo n.º 2
0
    def export_result(self, path, project: Project, size: QSize, parent):
        tif_result = QImage(size, QImage.Format_RGB32)
        mark_items = project.get_mark_items()

        painter = QPainter()
        painter.begin(tif_result)
        for mark_item in mark_items:
            painter.fillPath(mark_item.get_outline(), mark_item.color)
        painter.end()
        tif_result_array = qimage2numpy(tif_result)
        Image.fromarray(tif_result_array).save(path)
Exemplo n.º 3
0
    def detect_outline(self, detect_policy):
        """
        将选中的选区对应的部分图片copy出来,然后转为ndarray类型
        用来转为OpenCV识别轮廓的输入数据
        :param detect_policy: 用哪种识别算法识别轮廓
        :return: None
        """

        if detect_policy >= 5:

            numpy_array = self.ai_delete_outline(detect_policy)
            outline_path1, outline_path2 = self._get_outline_by_no_selection(
                numpy_array, detect_policy)

            if not self._selection_item:
                self._selection_item = SelectionItem(
                    QPoint(0, 0), self._workbench_scene,
                    self.workbench_view.transform().m11())
                path = QPainterPath()
                path.addRect(
                    QRectF(0, 0, self._image.width(), self._image.height()))
                self._selection_item.set_item_path_by_path(path)
                self._selection_item.reverse_select_signal.connect(
                    self._select_reverser_path)
            self._to_create_mark_item(outline_path1, outline_path2)
            return

        if not self._selection_item:
            QMessageBox.warning(self, "警告", "没有选择区域!")
            return

        if isinstance(self._selection_item, SelectionItem):

            outline_path1 = QPainterPath()
            outline_path2 = QPainterPath()
            if detect_policy == 4:
                self._workbench_scene.removeItem(self._selection_item)
                outline_path1 = self._selection_item.mapToScene(
                    self._selection_item.get_path())
                self._selection_item = None
            else:
                sub_img = self.get_sub_image_in(self._selection_item)
                if sub_img is None:
                    return
                if isinstance(sub_img, QImage):
                    sub_img = qimage2numpy(sub_img)
                outline_path1, outline_path2 = self._get_outlines(
                    sub_img, detect_policy)
            self._to_create_mark_item(outline_path1, outline_path2)