图像识别是python这门编程语言主要的开发和学习方向之一,而图像识别的关键就在于怎么准确识别出图像之中的物体并将其个截取或者是标记起来。而这篇文章就是会来给大家分享一个python图像识别的代码实例,感兴趣和想了解学习的话就继续往下看看吧。
1.第一步还是一样将opencv库导入进来之后将图片打开读取并转为灰度图,因为图像识别就是通过轮廓以及边缘剪切来完成的。然后还需要调用Sobel()分别计算出高低两个水平梯度上的图像,简单来说就是保留有明显边缘高低差区域的图像,代码如下:
import cv2 import numpy as np image = cv2.imread("cbm63.jpg") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gradX = cv2.sobel(gray, cv2.CV_32F, dx=1, dy=0, ksize=-1) gradY = cv2.sobel(gray, dx=0, dy=1, ksize=-1) gradient = cv2.subtract(gradX, gradY) gradient = cv2.convertScaleAbs(gradient)
2.因为图像物体识别需要让整个图像保持平滑且没有多余额外噪声的状态,所以需要调用低通滤波算法来将图像上的像素点进行替换,然后再将滤波算法之后像素为0的空白区域根据均值算法填充进指定颜色。而且在滤波处理完毕之后会有一些噪点存在,同时也是需要将它们给去除掉的,详细代码如下所示:
blurred = cv2.blur(gradient, (9, 9)) _, thresh = cv2.threshold(blurred, 90, 255, cv2.THRESH_BINARY) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25)) closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel) closed = cv2.erode(closed, None, iterations=4) closed = cv2.dilate(closed, iterations=4)
3.那么到这一步也就是最后一步了,需要找到物体在图像之中的轮廓然后完成截取操作。具体就是需要先检测外轮廓和内轮廓,然后建立不等级关系从而得到二者之间的差异。之后就是调用轮廓绘制方法来在图像中画出需要截取物体的轮廓,然后调用方法来将其截取即可,代码示例如下所示:
x = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) _a, cnts, _b = x c = sorted(cnts, key=cv2.contourArea, reverse=True)[0] rect = cv2.minAreaRect(c) Box = np.int0(cv2.BoxPoints(rect)) cv2.drawContours(image, [Box], -1, (0, 0), 3) Xs = [i[0] for i in Box] Ys = [i[1] for i in Box] x1 = min(Xs) x2 = max(Xs) y1 = min(Ys) y2 = max(Ys) hight = y2 - y1 width = x2 - x1 cropImg = image[y1:y1+hight, x1:x1+width] cv2.imwrite("bee.jpg", cropImg)
以上就是关于“Python怎么识别图像中物体并截取?Python图像识别如何写”的全部内容了,希望对你有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。