找到方框的角并裁剪图像
Finding corners of box and crop Image
大家好,我正在使用 numpy 和 opencv 并希望根据图像的轮廓裁剪图像。这是一个例子,我想裁剪图片的边缘,
我希望黄线(矩形)被 python、
裁剪
import numpy as np
import cv2
from PIL import Image
image = cv2.imread('4.png')
result = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([103, 131, 70])
upper = np.array([179, 234, 255])
mask = cv2.inRange(image, lower, upper)
result = cv2.bitwise_and(result, result, mask=mask)
print(image.shape)
cv2.imshow('mask', mask)
cv2.imshow('result', result)
cv2.waitKey()
您可以选择 LAB 颜色 space。
现在为什么要使用 LAB 颜色 space 而不是 HSV?
- 通过分析色度通道更容易分割您选择的颜色。
- 无需手动固定范围(与 HSV 颜色不同 space)。大津门槛会有帮助。
什么是LAB色space?
- L-channel :表示图像中的亮度值
- A-channel :表示 red 和 green[ 之间的颜色变化=56=]
- B-channel : 表示 blue 和 yellow[ 之间的颜色变化=56=]
Visit this page for better visualization
在分析了LAB转换图像的a-channel和b-channel之后,我们将利用a-channel,因为这里的框可以很容易地被分割。
img = cv2.imread('image_path')
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
a_component = lab[:,:,1]
th = cv2.threshold(a_component,127,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]
contours, hierarchy = cv2.findContours(th, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
c = max(contours, key = cv2.contourArea)
black = np.zeros((img.shape[0], img.shape[1]), np.uint8)
mask = cv2.drawContours(black,[c],0,255, -1)
result = cv2.bitwise_and(result, result, mask=mask)
希望这是您期待的结果
大家好,我正在使用 numpy 和 opencv 并希望根据图像的轮廓裁剪图像。这是一个例子,我想裁剪图片的边缘,
我希望黄线(矩形)被 python、
裁剪import numpy as np
import cv2
from PIL import Image
image = cv2.imread('4.png')
result = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([103, 131, 70])
upper = np.array([179, 234, 255])
mask = cv2.inRange(image, lower, upper)
result = cv2.bitwise_and(result, result, mask=mask)
print(image.shape)
cv2.imshow('mask', mask)
cv2.imshow('result', result)
cv2.waitKey()
您可以选择 LAB 颜色 space。
现在为什么要使用 LAB 颜色 space 而不是 HSV?
- 通过分析色度通道更容易分割您选择的颜色。
- 无需手动固定范围(与 HSV 颜色不同 space)。大津门槛会有帮助。
什么是LAB色space?
- L-channel :表示图像中的亮度值
- A-channel :表示 red 和 green[ 之间的颜色变化=56=]
- B-channel : 表示 blue 和 yellow[ 之间的颜色变化=56=]
Visit this page for better visualization
在分析了LAB转换图像的a-channel和b-channel之后,我们将利用a-channel,因为这里的框可以很容易地被分割。
img = cv2.imread('image_path')
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
a_component = lab[:,:,1]
th = cv2.threshold(a_component,127,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]
contours, hierarchy = cv2.findContours(th, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
c = max(contours, key = cv2.contourArea)
black = np.zeros((img.shape[0], img.shape[1]), np.uint8)
mask = cv2.drawContours(black,[c],0,255, -1)
result = cv2.bitwise_and(result, result, mask=mask)
希望这是您期待的结果