Python 有人能解释一下图像裁剪是如何工作的吗?
我是图像处理新手。我从Kaggle那里找到了下面的种植技术。有人能解释一下它是如何裁剪图像的吗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&
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函数是如何工作的,以及在边检测之后边界框是如何识别的?您可以使用调试器并在运行代码时观察变量。