利用python+opencv进行图像分割

利用python+opencv进行图像分割

进行PPT的图像分割

事实上对图片中PPT的分割有很多种方法,在此介绍的仅为传统的图像处理方法不涉及有关学习的方面。

算法实现

对于传统的图像处理方法应用的PPT分割的方面实际上并不多。

  1. 如果图像不清晰必须对其进行滤波除燥。

  2. 其次就是如果图像中出现许多干扰的因素,可以利用形态学处理,进行开闭运算,或者腐蚀膨胀运算消除其中的干扰。

  3. 最后就开始寻找边框,opencv中提供了一种寻找轮廓的函数
    findContours。
    findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArrayhierarchy, int mode,int method, Point offset=Point());
    image,单通道图像矩阵,可以是灰度图,常用的是二值图像,一般是经过 Canny、拉普拉斯等边缘检测算子处理过的二值图像。contours,一个双重向量,向量内每个元素保存了一组由连续的 Point 点构成的点的集合的向量,每一组 Point 点集就是一个轮廓。有多少轮廓,向量 contours 就有多少元素。hierarchy 也是一个向量,向量内每个元素保存了一个包含 4 个 int 整型的数组。向量 hiararchy 内的元素和轮廓向量 contours 内的元素是一一对应的,向量的容量相同。Int mode,定义轮廓的检索模式。int 型的 method,定义轮廓的近似方法。Point 偏移量,所有的轮廓信息相对于原始图像对应点的偏移量,相当于在每一个检测出的轮廓点上加上该偏移量,并且还可以是负值。

  4. 接下来是根据识别和检测到的轮廓寻找最大的那个轮廓便认为是PPT的轮廓。显然这样做会对图片的多样性产生局限。除此之外如果遇到斜着拍摄的图片,想要框出PPT区域可以利用投影变换。
    透视变换(Perspective Transformation)是将图片投影到一个新的视平面
    (Viewing Plane),也称作投影映射(Projective Mapping)。
    在本课题中涉及的 ppt 为四边形,所以使用四对点计算透射变换,在 opencv中提供了函数 cv.GetPerspectiveTransform(src,dst,map_matrix ),其中 src 表示输入图像的四边形顶点坐标,dst 表示输出图像的相应的四边形顶点坐标map_matrix指向 3×3 输出矩阵的指针。
    在这里插入图片描述
    上图为原图图,下图为处理之后的图在这里插入图片描述
    带有倾斜角度的图以及处理后的图:
    在这里插入图片描述
    在这里插入图片描述
    但要想达到完美的效果必须调整参数,不同图片有不一样的参数。
    表决器图对应的参数:
    pts1 = np.float32([[p[0][0],p[[0][[1]],[p[1][0],p[[1][[1]],[p[2][0],p[2][1]],[p[3][0],p[[3][[1]])
    在这里插入图片描述以上便是我做此题目的小小经验与看法欢迎大家指正,给出建议。
    部分想法来自网络,加以融合和改进,侵删。

猜你喜欢

转载自blog.csdn.net/weixin_45016866/article/details/115025149