| 119 | } |
| 120 | |
| 121 | QImage watershed(const QImage& qimage, const QImage & qmarkers_mask) { |
| 122 | cv::Mat image = qImage2Mat(qimage); |
| 123 | cv::Mat markers_mask = qImage2Mat(qmarkers_mask); |
| 124 | cv::Mat markers = cv::Mat::zeros(markers_mask.size(), CV_32S); |
| 125 | for (int y = 0; y < markers_mask.rows; y++) { |
| 126 | int* mark = markers.ptr<int>(y); |
| 127 | cv::Vec3b* mask = markers_mask.ptr<cv::Vec3b>(y); |
| 128 | for (int x = 0; x < markers_mask.cols; x++) { |
| 129 | mark[x] = mask[x][0]; |
| 130 | } |
| 131 | } |
| 132 | cv::watershed(image, markers); |
| 133 | cv::Mat new_mask = convertMat32StoRGBC3(markers); |
| 134 | return mat2QImage(new_mask); |
| 135 | } |
| 136 | |
| 137 | QImage removeBorder(const QImage & mask_id, const Id2Labels & labels, cv::Size win_size) { |
| 138 | QImage result = mask_id.copy(); |
no test coverage detected