Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2 OpenCV 2-凸面外壳关闭开放的Canny边缘?_Python_C++_Python 2.7_Opencv - Fatal编程技术网

Python 2 OpenCV 2-凸面外壳关闭开放的Canny边缘?

Python 2 OpenCV 2-凸面外壳关闭开放的Canny边缘?,python,c++,python-2.7,opencv,Python,C++,Python 2.7,Opencv,我正在创建一个Python程序,它将拍摄一张图像(一张床的照片),然后运行Canny边缘检测,然后运行凸包轮廓检测,以确定床的位置 这是我的照片(请原谅这张糟糕的Photoshop照片) 以下是我目前的代码: import numpy as np import argparse import glob import cv2 import sys from pyimagesearch import imutils from skimage import exposure def auto_

我正在创建一个Python程序,它将拍摄一张图像(一张床的照片),然后运行Canny边缘检测,然后运行凸包轮廓检测,以确定床的位置

这是我的照片(请原谅这张糟糕的Photoshop照片)

以下是我目前的代码:

import numpy as np
import argparse
import glob
import cv2
import sys

from pyimagesearch import imutils
from skimage import exposure


def auto_canny(image, sigma = 0.35):
    # compute the mediam of the single channel pixel intensities
    v = np.median(image)

    # apply automatic Canny edge detection using the computed median
    lower = int(max(0, (1.0 - sigma) * v))
    upper = int(min(255, (1.0 + sigma) *v))
    edged = cv2.Canny(image, lower, upper)

    # return edged image
    return edged

image = cv2.imread("bed_cv.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (3, 3), 0)

wide = auto_canny(blurred, 0.35)
tight = auto_canny(blurred, 0.95)
auto = auto_canny(blurred)



cv2.imshow("Original", image)
cv2.imshow("Edges", tight)

cv2.waitKey(0)
我们在这里主要做的是得到图像,变成灰色,模糊,然后进行精明的边缘检测

以下是我到目前为止得到的结果:

下一步我要做的是运行凸包轮廓检测,这样床的右上角将被关闭,并且希望得到床所在位置的一个很好的矩形估计

现在我陷入困境主要是因为我不知道如何使用船体点?我试过这样的方法:

hull = cv2.convexHull(cnts, returnPoints = False)
但我不知道以后该怎么办


我现在的主要线索是。这正是我需要的。他的初始输出是两组断开的边,答案是设法将它们连接起来。但是,我的C++很生疏,我不知道如何将C++代码转换成Python。我认为,如果我得到这个的Python版本,我的问题基本上就解决了。

这里有一个仅使用OpenCV的解决方案,对我来说非常有用:

mask = cv2.Canny(gray, lowerThresh, upperTresh)
cnts = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i, cnt in enumerate(cnts):
    cnts[i] = cv2.convexHull(cnts[i])

希望有帮助

这里有一个仅使用OpenCV的解决方案,对我来说非常有效:

mask = cv2.Canny(gray, lowerThresh, upperTresh)
cnts = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i, cnt in enumerate(cnts):
    cnts[i] = cv2.convexHull(cnts[i])

希望有帮助

。让我知道如果你想它编码,我会把它作为一个answer@RickM. 请你把它编码出来好吗?我想看看它在我的箱子里用。当然。我将在周末做这件事。还是没有密码哈哈哈。让我知道如果你想它编码,我会把它作为一个answer@RickM. 请你把它编码出来好吗?我想看看它在我的箱子里用。当然。我将在周末做这件事。还是没有密码啊哈哈哈