Reg:根据blob大小的面积复制blob
Reg: Copy blob based on the area of the blob size
Objective: 在另一个蒙版图像中复制更大的斑点
我有一个带有斑点的阈值图像,如图所示:
我怎样才能将较大的斑点复制到蒙版图像中而忽略一个像素的斑点?
我的代码(但我没有得到想要的结果):
import numpy as np
import cv2
ref_img = cv2.imread('threshold.jpg', 0)
thresh = np.copy(ref_img)
cnts,_ = cv2.findContours(ref_img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
mask = np.zeros(ref_img.shape, dtype="uint8")
for c in cnts:
(x,y),radius = cv2.minEnclosingCircle(c)
area = cv2.contourArea(c)
if int(area) < 1:
cv2.circle(mask, (int(x), int(y)), int(radius), (255, 255, 255), -1)
cv2.imshow('img', mask)
cv2.waitKey(0)
注意: 使用 OpenCV 2.4.x
这是您可以用来实现目标的方法之一。代码注释中有说明
import numpy as np
import cv2
ref_img = cv2.imread('threshold.jpg', 0)
img, cnts,_ = cv2.findContours(ref_img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
mask = np.zeros(ref_img.shape, dtype="uint8")
for c in cnts:
# Get the bounding rect surrounding your blobs
x,y,w,h = cv2.boundingRect(c)
# Calculating the area of the rect is similar to the area of the blob minus the complexity
area = w*h
# For box area bigger than one, copy the information from the source image to the mask.
# Since the bounding box contains all the relevant information, just copy the entire box to the mask.
if int(area) > 1 :
mask[y:y+h,x:x+w] = ref_img[y:y+h,x:x+w]
cv2.imshow('img', mask)
cv2.waitKey(0)
Objective: 在另一个蒙版图像中复制更大的斑点
我有一个带有斑点的阈值图像,如图所示:
我怎样才能将较大的斑点复制到蒙版图像中而忽略一个像素的斑点?
我的代码(但我没有得到想要的结果):
import numpy as np
import cv2
ref_img = cv2.imread('threshold.jpg', 0)
thresh = np.copy(ref_img)
cnts,_ = cv2.findContours(ref_img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
mask = np.zeros(ref_img.shape, dtype="uint8")
for c in cnts:
(x,y),radius = cv2.minEnclosingCircle(c)
area = cv2.contourArea(c)
if int(area) < 1:
cv2.circle(mask, (int(x), int(y)), int(radius), (255, 255, 255), -1)
cv2.imshow('img', mask)
cv2.waitKey(0)
注意: 使用 OpenCV 2.4.x
这是您可以用来实现目标的方法之一。代码注释中有说明
import numpy as np
import cv2
ref_img = cv2.imread('threshold.jpg', 0)
img, cnts,_ = cv2.findContours(ref_img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
mask = np.zeros(ref_img.shape, dtype="uint8")
for c in cnts:
# Get the bounding rect surrounding your blobs
x,y,w,h = cv2.boundingRect(c)
# Calculating the area of the rect is similar to the area of the blob minus the complexity
area = w*h
# For box area bigger than one, copy the information from the source image to the mask.
# Since the bounding box contains all the relevant information, just copy the entire box to the mask.
if int(area) > 1 :
mask[y:y+h,x:x+w] = ref_img[y:y+h,x:x+w]
cv2.imshow('img', mask)
cv2.waitKey(0)