我正在尝试找到一种方法来对墓地图像进行近似分割(在文化科学中的 CBIR 的背景下 - 但这不是主题)。到目前为止,我正在使用这种策略:
- 两次模糊图像(实验结果)
- 应用 Canny-Edge-Detector
寻找轮廓
int main(int argc, const char* argv[]) { cout << "Starting " << endl; Mat sourceImage; sourceImage = imread("singlesegmentation/DSCN5204.JPG", CV_LOAD_IMAGE_COLOR); if (!sourceImage.data) { cout << "No Image found." << endl; return -1; } cv::Mat blurred = imagePro::blurrNtimes(2, sourceImage); cv::Mat target = edged::applyCanny(blurred); cout << "Canny applied " << endl; vector<vector<Point> > contours; vector<Vec4i> hierarchy; cv::Point offset; offset.x = sourceImage.rows / 2; offset.y = sourceImage.cols / 2; cv::findContours(target, contours, hierarchy, CV_RETR_TREE , CV_CHAIN_APPROX_SIMPLE, offset); cout << "Contours applied " << endl; int idx = 0; for (; idx >= 0; idx = hierarchy[idx][0]) { Scalar color(rand() & 255, rand() & 255, rand() & 255); drawContours(target, contours, idx, color, CV_FILLED, 8, hierarchy); } cout << "Lines applied " << endl; cv::namedWindow("Contour", CV_WINDOW_NORMAL); cv::imshow("Contour", target); cv::waitKey(0); return 0;
}
命名空间“imagePro”和“edged”包含 opencv 的简单代码,用于模糊图像并进一步处理它。该代码有效。这是一个示例图片: 但现在我不知道如何分割图像。我想从矩形石头的内部到外部,当我找到一条线时,我想记住坐标然后剪切内容。如果您有想法或提示,谢谢!