Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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 有人能解释一下图像裁剪是如何工作的吗?_Python_Opencv_Machine Learning_Image Processing_Computer Vision - Fatal编程技术网

Python 有人能解释一下图像裁剪是如何工作的吗?

Python 有人能解释一下图像裁剪是如何工作的吗?,python,opencv,machine-learning,image-processing,computer-vision,Python,Opencv,Machine Learning,Image Processing,Computer Vision,我是图像处理新手。我从Kaggle那里找到了下面的种植技术。有人能解释一下它是如何裁剪图像的吗 def edge_and_cut(img): try: edges = cv2.Canny(img, img_w, img_h) if(np.count_nonzero(edges)>edges.size/10000): pts = np.argwhere(edges&

我是图像处理新手。我从Kaggle那里找到了下面的种植技术。有人能解释一下它是如何裁剪图像的吗

def edge_and_cut(img):
    try:
        edges = cv2.Canny(img, img_w, img_h)            
        
        if(np.count_nonzero(edges)>edges.size/10000):           
            pts = np.argwhere(edges>0)
            y1,x1 = pts.min(axis=0)
            y2,x2 = pts.max(axis=0)
            
            new_img = img[y1:y2, x1:x2]           
            new_img = cv2.resize(new_img,(img_w, img_h))  
        else:
            new_img = cv2.resize(img,(img_w, img_h))
    
    except Exception as e:
        print(e)
        new_img = cv2.resize(img,(img_w, img_h))
    
    return new_img

def crop_images(Imgs):
    CroppedImages = np.ndarray(shape=(len(Imgs), img_w, img_h, 3), dtype=np.int)

    ind = 0
    for im in Imgs: 
        x = edge_and_cut(im)
        CroppedImages[ind] = x
        ind += 1

    return CroppedImages
以下是输出:


是Canny边缘检测器。如果我理解正确,它的输出被视为二值图像(由表示“边”和“非边”的单元格组成),然后它会找到包含所有“边”单元格的最小边界框(矩形)。此框是从图像中提取的。

是Canny边缘检测器。如果我理解正确,它的输出被视为二值图像(由表示“边”和“非边”的单元格组成),然后它会找到包含所有“边”单元格的最小边界框(矩形)。此框是从图像中提取的。

裁剪部分由以下人员完成:

    new_img = img[y1:y2, x1:x2]   

在这里,您将从y1到y2,以及x1到x2对图像阵列进行切片,因此您只需保留图像的该区域,即由点(x1,y1)、(x1,y2)、(x2,y1)、(x2,y2)包围的矩形。在这种特殊情况下,该区域由cv2的Canny边缘检测器选择,如。

裁剪部分通过以下方式完成:

    new_img = img[y1:y2, x1:x2]   

在这里,您将从y1到y2,以及x1到x2对图像阵列进行切片,因此您只需保留图像的该区域,即由点(x1,y1)、(x1,y2)、(x2,y1)、(x2,y2)包围的矩形。在这种特殊情况下,该区域由cv2的Canny边缘检测器选择,如。

这并不是真正回答问题,而是关于图像裁剪如何工作,而不是Canny。这不是真正回答问题,而是关于图像裁剪如何工作,而不是Canny。请定义“如何实际裁剪图像”的含义。你不明白代码的哪一部分?不是代码的任何特定部分,但我对使用canny边缘检测进行裁剪的整个过程表示怀疑。就像裁剪之后一样,识别边界框的具体过程是什么?裁剪是这里的最后一步。之后什么也没发生。对不起,不是在裁剪之后,我错误地写了裁剪。我的意思是在找到边缘后,那些最小和最大函数是如何工作的,以及在边缘检测后边界框是如何识别的?您可以使用调试器并在运行代码时观察变量。请定义“它实际上是如何裁剪图像”的含义。你不明白代码的哪一部分?不是代码的任何特定部分,但我对使用canny边缘检测进行裁剪的整个过程表示怀疑。就像裁剪之后一样,识别边界框的具体过程是什么?裁剪是这里的最后一步。之后什么也没发生。对不起,不是在裁剪之后,我错误地写了裁剪。我的意思是在找到边之后,那些min和max函数是如何工作的,以及在边检测之后边界框是如何识别的?您可以使用调试器并在运行代码时观察变量。