- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 OpenCV 的新手,我正在尝试在特定轮廓内绘制外部轮廓。这是我用来澄清的图像(已经灰度化、阈值化等)
我想要的是找到外矩形内的所有圆圈(总共 120 个)的轮廓。
contours = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
所以我基本上使用了 RETR_EXTERNAL
但它只返回外矩形。我尝试使用 RETR_TREE
但在那种情况下,它返回给我的轮廓比圆圈多,出于某种我不明白的原因。澄清一下:我只想要每个圆 1 个轮廓。
如何使用 RETR_EXTERNAL
并忽略外部轮廓(矩形),以便它只返回圆圈?
最佳答案
我按区域过滤轮廓以隔离圆圈。我认为您可能需要处理 thresholding图像多一点,以帮助从图像中的边界描绘圆圈。我使用了以下代码:
import cv2
import numpy as np
img = cv2.imread("/your/path/C03eN.jpg")
def find_contours_and_centers(img_input):
img_gray = cv2.cvtColor(img_input, cv2.COLOR_BGR2GRAY)
img_gray = cv2.bilateralFilter(img_gray, 3, 27,27)
#(T, thresh) = cv2.threshold(img_input, 0, 100, 0)
_, contours_raw, hierarchy = cv2.findContours(img_gray, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
contours = [i for i in contours_raw if cv2.contourArea(i) > 20]
contour_centers = []
for idx, c in enumerate(contours):
M = cv2.moments(c)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
samp_bounds = cv2.boundingRect(c)
contour_centers.append(((cX,cY), samp_bounds))
print("{0} contour centers and bounds found".format(len(contour_centers)))
contour_centers = sorted(contour_centers, key=lambda x: x[0])
return (contours, contour_centers)
conts, cents = find_contours_and_centers(img.copy())
circles = [i for i in conts if np.logical_and((cv2.contourArea(i) > 650),(cv2.contourArea(i) < 4000))]
cv2.drawContours(img, circles, -1, (0,255,0), 2)
cv2.imwrite("/your/path/tester.jpg", img)
如果您只想提取较大外部矩形内的图像部分,使用 cv2.RETR_EXTERNAL
,让您专注于内部圆圈,您可以执行如下操作:
import cv2
import numpy as np
img = cv2.imread("/your/path/C03eN.jpg")
def find_contours_and_centers(img_input):
img_gray = cv2.cvtColor(img_input, cv2.COLOR_BGR2GRAY)
img_gray = cv2.bilateralFilter(img_gray, 3, 27,27)
#(T, thresh) = cv2.threshold(img_input, 0, 100, 0)
#_, contours_raw, hierarchy = cv2.findContours(img_gray, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
_, contours_raw, hierarchy = cv2.findContours(img_gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = [i for i in contours_raw if cv2.contourArea(i) > 20]
contour_centers = []
for idx, c in enumerate(contours):
M = cv2.moments(c)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
samp_bounds = cv2.boundingRect(c)
contour_centers.append(((cX,cY), samp_bounds))
print("{0} contour centers and bounds found".format(len(contour_centers)))
contour_centers = sorted(contour_centers, key=lambda x: x[0])
return (contours, contour_centers)
conts, cents = find_contours_and_centers(img.copy())
x,y,w,h = cv2.boundingRect(conts[0])
cropped = img[y+10:y+(h-10),x+10:x+(w-10)]
cv2.imwrite("/your/path/cropped.jpg", cropped)
关于Python OpenCV : draw outer contours inside a specific contour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51919841/
class Outer { class Inner { } } public class Demo { public static void main(
不确定我是否明白这一点,但我从 pyLint 收到验证错误说: Redefining name 'a' from outer scope (line 443) (redefined-outer-nam
我是 SQL 新手,最近开始在我的代码中实现联接,我希望检索的数据可以使用以下 SQL 语句来完成。但是,如您所知,SQLite3 不支持 RIGHT OUTER 和 FULL OUTER JOIN。
怀疑但不确定:是 FROM 中表格的简单列表-clause 根据定义是完全连接? SELECT * FROM table1, table2 我们在参数不相等的情况下连接表的情况是否是完全外连接的实现?
我想知道 numpy 中是否有一个功能与 np.outer 类似,但使用二维数组和向量作为输入参数。结果应该是一个 3 维数组。 例如,如果我有一个矩阵 M 和一个向量 v,我想将原始矩阵 M 堆叠
以下代码在 MSVC 上编译: #include class Bob { int a; friend class Outer; }; class Outer {
Spark SQL 文档指定 join()支持以下连接类型: Must be one of: inner, cross, outer, full, full_outer, left, left_out
谁能帮我解决以下问题.. 这里我们有1.左外连接2.两个右外连接 如何结合左右 O.J 并创建与上面相同的效果, 我需要重写相同的查询,这是因为我正在将旧的 ms SQL2009 转换为 ms SQL
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
使用 ANSI 语法的 Informix 查询性能是否有差异: SELECT .. LEFT OUTER JOIN some_table ON () LEFT OUTER JOIN some_
根据clang , gcc 和 vs2013,函数 Outer::f 是 not 类 Outer::Inner 的 friend 。 struct Outer { void f() {}
换句话说,对于嵌套/多个 JOIN SQL 语句,是否应该始终首先使用 INNER JOIN(要么将其放在顶部行或通过使用括号首先 INNER JOIN 两个表)并确保它在任何 OUTER JOIN
我们有以下查询。使用 LEFT OUTER 连接需要 9 秒才能执行。将 LEFT OUTER 更改为 LEFT INNER 可将执行时间减少到 2 秒,并且返回相同行数。由于无论连接类型如何,都正在
为什么在实例化通用外部类(连同内部类)时使用菱形运算符会在代码段 2 中产生错误,而代码段 1 却完全没问题? 我知道稀有类型是被禁止的,但我的情况不是稀有类型——在稀有类型中,外部和内部都是通用的,
我有 4 个表,如下所示。 表:类 ClassID | ClassSTD -------------------------------- 1 | STD-1 2
是否有关于“外部 =>”功能的文档?它看起来像一个带有推断类型的自类型注释。然而我有一种感觉,我错了。 如果是这样,是否只是表达对 super 的访问的不同方式? ? trait A extends
我有 2 个表 users 和 orders,我想获取 users 和他的订单数 SELECT `users`.*, `orders`.*,count(*) FROM `users` LEFT JOI
我有一个非常古老的 informix 过程,我想在我的新 PostgreSQL 数据库中使用它。我是 Postgres 的新手,我觉得连接很不一样。 这是我的旧 Informix 代码的一部分: CR
我非常擅长 SQL 语句,希望能得到一点帮助。我发现我需要对其中一些表使用 OUTER 联接,但 MySQL 没有该功能。 SELECT validclick.Campaign
对,这有点令人困惑,我不确定通过 sql 是否可行。 我的第一个表叫做成员,我目前有这个 user:ID type: firstname: lastname: 这是表中的数据 members tabl
我是一名优秀的程序员,十分优秀!