我有一个简单的图像,其中包含一些形状:一些矩形和一些椭圆形,总共 4 或 5 个。形状可以旋转、缩放和重叠。有一个示例输入:
我的任务是检测所有这些图形并准备一些有关它们的信息:大小、位置、旋转等。在我看来,核心问题是形状可以相互重叠。我尝试搜索一些有关此类问题的信息,发现 OpenCV 库非常有用。
OpenCV 能够检测轮廓,然后尝试将椭圆或矩形拟合到这些轮廓。问题是当形状重叠时,轮廓会混淆。
我考虑以下算法:检测所有特征点:并在它们上面放置白点。我得到了类似的东西,其中每个数字都分为不同的部分:
然后我可以尝试使用一些信息链接这些部分,例如复杂度值(我将曲线 approxPolyDP 拟合到轮廓并读取它有多少个部分)。但这开始变得非常困难。另一个想法是尝试连接轮廓的所有排列并尝试使图形适合它们。将输出最好的编译。
有什么想法如何创建简单但优雅的解决方案吗?
我需要从几个其他形状创建一个形状,理想情况下,我会在最后得到一个单一的形状结构,它会像 ZStack 那样堆叠两个形状。我在任何地方都没有注意到这个明显的实现,所以也许有人对如何实现它有一些想法?
这就是我想要的:
struct CustomShape: Shape {
func path(in rect: CGRect) -> Path {
// Add shapes here???? For example, combine Rectangle with Circle?
}
}
Run Code Online (Sandbox Code Playgroud) 我对这个问题有答案,但我花了太多时间寻找它。这就是我创建这个问题的原因,这样对其他人来说会更容易。
您不能像通常的视图一样使用形状 @drawable 来圆化图像角。这就是为什么您需要对代码内的图像进行一些更改。
那里有任何绘图库真的很简单吗?我的字面意思是"draw_circle(screen,x,y,r,color)"之类的函数或类似的东西.
我已经看过SDL,但它不支持我想要的东西 - 如果可能的话,我想要一些非常容易使用的东西.
按照惯例,图像张量始终是 3D 的:一维为其height
,一维为其,width
第三维为其color channel
。它的形状看起来像(height, width, color)
。
例如,一批 128 张大小为 256x256 的彩色图像可以存储在 shape 的 4D 张量中(128, 256, 256, 3)
。颜色通道在这里表示 RGB 颜色。另一个示例,批量 128 个灰度图像存储在形状为 的 4D 张量中(128, 256, 256, 1)
。颜色可以编码为 8 位整数。
对于第二个示例,最后一个维度是一个仅包含一个元素的向量。然后可以使用形状的 3D 张量(128, 256, 256,)
代替。
我的问题来了:我想知道使用 3D 张量而不是 4D 张量作为使用 keras 的深度学习框架的训练输入之间是否有区别。
编辑:我的输入层是一个 conv2D
我一直在学习他们网站上的 TensorFlow 教程。在使用 RNN 进行文本分类练习中,我遇到了这个错误。我尝试了一些更改,并且还复制并粘贴了代码以收到相同的错误。有什么建议?谢谢
我试过在分配了 padded_batch 后改组数据集。我可以从文档中看到,Shuffle 没有属性 (output_shapes)。我想不出另一种方法。
BUFFER_SIZE = 10000
BATCH_SIZE = 64
train_dataset = train_dataset.shuffle(BUFFER_SIZE)
train_dataset = train_dataset.padded_batch(BATCH_SIZE, train_dataset.output_shapes)
test_dataset = test_dataset.padded_batch(BATCH_SIZE, test_dataset.output_shapes)
Run Code Online (Sandbox Code Playgroud)
收到此错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-8a10fa01af19> in <module>()
3
4 train_dataset = train_dataset.shuffle(BUFFER_SIZE)
----> 5 train_dataset = train_dataset.padded_batch(BATCH_SIZE, train_dataset.output_shapes)
6
7 test_dataset = test_dataset.padded_batch(BATCH_SIZE, test_dataset.output_shapes)
AttributeError: 'ShuffleDataset' object has no attribute 'output_shapes'
Run Code Online (Sandbox Code Playgroud) 我在为 HoughCircles 函数选择正确的参数时遇到问题。我尝试从视频中检测圆圈。这个圆圈是我做的,尺寸几乎一样。问题是相机在移动。
当我更改 maxRadius 时,它仍然以某种方式检测到更大的圆圈(见右图)。我也尝试更改 param1, param2 但仍然没有成功。
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.medianBlur(gray, 25)#cv2.bilateralFilter(gray,10,50,50)
minDist = 100
param1 = 500
param2 = 200#smaller value-> more false circles
minRadius = 5
maxRadius = 10
circles = cv2.HoughCircles(blurred, cv2.HOUGH_GRADIENT, 1, minDist, param1, param2, minRadius, maxRadius)
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(blurred,(i[0], i[1]), i[2], (0, 255, 0), 2)
Run Code Online (Sandbox Code Playgroud)
也许我使用了错误的功能?
我有一个匀称的多边形。我想将这些多边形切割成n 个多边形,它们都有或多或少相同大小的区域。大小相同是最好的,但近似值也可以。
我尝试使用此处描述的两种方法,这两种方法都是朝着正确方向迈出的一步,而不是我所需要的。两者都不允许目标n
我研究了voronoi,我对它很不熟悉。此分析给出的结果形状是理想的,但它需要点,而不是形状作为输入。
在 SwiftUI Shapes 中,我们可以使用渐变来制作不同的颜色描边。
例如-
@ViewBuilder
func lineWithSecondColorStyleFromPositionN() -> some View {
let n = 0.5
GeometryReader { gr in
Path { path in
path.move(to: CGPoint(x: 0, y: 0))
path.addLine(to: CGPoint(x: gr.size.width, y: gr.size.height))
}
.stroke(
LinearGradient(stops: [
Gradient.Stop(color: .red, location: 0),
Gradient.Stop(color: .red, location: n),
Gradient.Stop(color: .blue, location: n),
Gradient.Stop(color: .blue, location: 1)
], startPoint: .top, endPoint: .bottom),
style: StrokeStyle(lineWidth: 10, lineCap: .butt)
)
}
.frame(height: 200)
}
Run Code Online (Sandbox Code Playgroud)
是否可以通过任何方式对笔划样式执行相同的操作?
创建这样的东西 -
笔划样式 1(实线)从 0 到n
,
描边样式 2(虚线)从 …
我正在尝试创建一个两边都有三角形形状的自定义工具提示。我创建了一个气泡,但如何在不使用任何库的情况下添加三角形?
class SdToolTip extends StatelessWidget {
final Widget child;
final String message;
const SdToolTip({
required this.message,
required this.child,
});
@override
Widget build(BuildContext context) {
return Center(
child: Tooltip(
child: child,
message: message,
padding: const EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.blueAccent.withOpacity(0.6),
borderRadius: BorderRadius.circular(22)),
textStyle: const TextStyle(
fontSize: 15, fontStyle: FontStyle.italic, color: Colors.white),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)