使用OpenCV进行图像分割

3

我对openCV比较新,需要一些帮助。

所以我的基本想法是使用opencv创建一个室内设计的小程序。

问题

如何区分图片中的墙壁和地板(即使图片中有一些噪点)。

例如:enter image description here

现在,我的想法是,如果我能找到墙壁或瓷砖的边缘,然后如果使用任何用于室内装饰的对象(例如任何椅子),那么该对象将完美地放置在地板上(即两个图像混合在一起)。

我的方法

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv/cv.h>
using namespace cv;
using namespace std;
int main(){
  Mat image=imread("/home/ayusun/Downloads/IMG_20140104_143443.jpg");
  Mat resized_img,dst,contours,detected_edges;
  resize(image, resized_img, Size(1024, 768), 0, 0, INTER_CUBIC);
  threshold(resized_img, dst, 128, 255, CV_THRESH_BINARY);
  //Canny(image,contours,10,350);

  namedWindow("resized image");
  imshow("resized image",resized_img);

  //imshow("threshold",dst);
  blur( resized_img, detected_edges, Size(2,2) );
  imshow("blurred", detected_edges);

  Canny(detected_edges,contours,10,350);
  imshow("contour",contours);
  waitKey(0);
  return 1;
}

我尝试了canny边缘检测算法,但它似乎找到了很多边缘。而且我还不知道如何将房间的地板与椅子的地板结合起来。
谢谢。
3个回答

1
抱歉打扰,但是宜家使用了一个目录智能手机应用程序,该应用程序使用增强现实技术将物品/家具放置在您的房间图像周围。这是您想要做的吗?

enter image description here

为了实现这一点,您需要一个“定点”,即固定点来钩住您的对象。在上面的应用程序中,通常可以帮助区分墙壁和地板(并使事情变得容易)。
即使对于人类来说,如果他们倒立悬挂,墙壁和地板上有相同的纹理,区分墙壁和地板也很困难(但我们通过我们的“重力感觉”来完成)。
找到一些关键点,或者请说明是否打算使用固定摄像机(即它永远不会水平放置)。

抱歉,我不太明白固定相机部分的意思。如果墙壁和地板有不同的纹理怎么办?就像我的情况一样,地板和墙壁有不同的纹理。假设我总是考虑底部纹理为地板,上面的纹理为墙壁。很抱歉问题描述得不够清楚,但我对OpenCV和增强现实的了解非常有限。 - Ayush choubey
我不是专家,但如果你有不同的纹理,那就是另一回事了:如果你的纹理容易识别(例如某种图案,可以使用OpenCV查看棋盘样本),那么你可以在没有任何边缘检测的情况下区分它们(或者在检测到它们后再进行边缘检测)。 - Marco A.

1

从单个图像中分割出墙壁和地面在一定程度上是可能的,但需要大量工作,如果希望达到良好的结果,则需要相当复杂的系统。使用一对图像(立体重建)可以做得更好。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接