- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试运行一些 Convex Hull 图像处理。基本上我想做的是关闭一个开放的轮廓。
我找到了 this answer over at the opencv forum这正是我想做的。一段时间前,我开始将代码从 C++ 转换为 Python。我成功地转换了问题的代码,但答案的代码给我带来了比预期更艰难的时间。
这是我目前所拥有的:
import cv2
import numpy as np
def contoursConvexHull(contours):
print("contours length = ", len(contours))
print("contours length of first item = ", len(contours[1]))
pts = []
for i in range(0, len(contours)):
for j in range(0, len(contours[i])):
pts.append(contours[i][j])
result = cv2.convexHull(pts)
return result
# Get our image in color mode (1)
src = cv2.imread("source.png", 1);
# Convert the color from BGR to Gray
srcGray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
# Use Gaussian Blur
srcBlur = cv2.GaussianBlur(srcGray, (3, 3), 0)
# ret is the returned value, otsu is an image
ret, otsu = cv2.threshold(srcBlur, 0, 255,
cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# Use canny
srcCanny = cv2.Canny(srcBlur, ret, ret*2, 3)
# im is the output image
# contours is the contour list
# I forgot what heirarchy was
im, contours, heirarchy = cv2.findContours(srcCanny,
cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(src, contours, -1, (0, 255, 0), 3)
ConvexHullPoints = contoursConvexHull(contours)
cv2.polylines(src, [ConvexHullPoints], True, (0, 255, 255), 2)
cv2.imshow("Test", src)
cv2.waitKey(0)
当我尝试运行它时,它给了我
result = cv2.convexHull(pts)
TypeError: points is not a numpy array, neither a scalar
我猜我正在为 convexHull
提供一个输入,它需要其他东西。
我在 C++ 方面相当不错,但在 Python 方面我完全是个初学者。我想我可能在将轮廓元素附加到 pts
列表时做错了什么?
老实说,我不太清楚为什么我们需要将这些点追加回一个新数组,似乎没有任何值操纵或重新排列正在进行。
C++代码供引用:
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
using namespace cv;
using namespace std;
vector<Point> contoursConvexHull( vector<vector<Point> > contours )
{
vector<Point> result;
vector<Point> pts;
for ( size_t i = 0; i< contours.size(); i++)
for ( size_t j = 0; j< contours[i].size(); j++)
pts.push_back(contours[i][j]);
convexHull( pts, result );
return result;
}
int main( int, char** argv )
{
Mat src, srcGray,srcBlur,srcCanny;
src = imread( argv[1], 1 );
cvtColor(src, srcGray, CV_BGR2GRAY);
blur(srcGray, srcBlur, Size(3, 3));
Canny(srcBlur, srcCanny, 0, 100, 3, true);
vector<vector<Point> > contours;
findContours( srcCanny, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );
Mat drawing = Mat::zeros(srcCanny.size(), CV_8UC3);
for (int i = 0; i< contours.size(); i++)
{
Scalar color = Scalar( 255,255,255);
drawContours( drawing, contours, i, color, 2 );
}
vector<Point> ConvexHullPoints = contoursConvexHull(contours);
polylines( drawing, ConvexHullPoints, true, Scalar(0,0,255), 2 );
imshow("Contours", drawing);
polylines( src, ConvexHullPoints, true, Scalar(0,0,255), 2 );
imshow("contoursConvexHull", src);
waitKey();
return 0;
}
最佳答案
错误提示 pts
不是一个 numpy 数组;它是一个 python list
。
要将 pts
转换为数组,导入 numpy 并进行简单转换:
import numpy as np
# code ....
pts = np.array(pts)
result = cv2.convexHull(pts)
关于Python OpenCV - ConvexHull 错误 "Points is not a numpy array, neither a scalar"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698584/
我知道关于这个错误已经有几个问题了。但在这种特殊情况下,我不确定是否已经有解决我的问题的方法。 我有这部分代码,我想打印 Dataframe df 的“y”列。 出现以下错误: 类型错误:只有整数标量
我为这个问题做了一个更简单的两个数组的例子: labelArray 是一个一维数组,在索引处有标签,对应于 nD 数组 someValuesArray。我得到了标签 2 出现的所有索引,并希望检索 s
我正在尝试 github link 中的 tensorflow 的简单演示代码. 我目前使用的是python 3.5.2版 Z:\downloads\tensorflow_demo-master\te
我在一个图像数组中有一些真实图像,而在另一个图像数组中有一些虚假图像。我想附加两个numpy图像阵列来训练我的CNN模型。但是np.concatenate产生错误only integer scalar
我有一组属性,单个属性的每个值要么是标量(字符串、整数……),要么是标量集合(集合、集合……)。以下是一个 XML 文档作为示例: 1 1 2
我首先要说的是,我对 python 和 Stack Overflow 非常陌生。我正在尝试对一堆不同的数组进行操作。这些数组之一的示例是 s2 = np.array( ['e','e','e','k'
i=np.arange(1,4,dtype=np.int) a=np.arange(9).reshape(3,3) 和 a >>>array([[0, 1, 2], [3, 4,
重命名DataFrame的列后,合并新列时出现错误: import pandas as pd df1 = pd.DataFrame({'a': [1, 2]}) df2 = pd.DataFrame(
我正在我的代码中寻找一个奇怪的运行时错误,该错误是一致的。我在一行中得到了我认为未定义的行为:Eigen::Vector3d m = d1 * cos(theta) + d2 * sin(theta)
我正在尝试这样做: for i in cols: print('rmse value for', i, 'is : ', np.sqrt(mean_squared_error(pred[i],
我试图找到数据集最大值处的 x 值以及每个最大值所在的峰值宽度。我已经厌倦了下面的代码,第一部分正确返回峰值 x 位置,但是一旦添加第二部分,它就会失败并显示错误消息: TypeError: only
我想创建一个程序来使用 SVM 对文本数据进行分类。但在此之前,我必须使用 StratifiedKFold() 将数据拆分为训练数据和测试数据。 但它以这个错误结束: 'Traceback (most
我正在尝试为我的神经网络实现自定义数据集。但是在运行转发功能时出现此错误。代码如下。 import torch import torch.nn as nn import torch.nn.functi
我确信我错过了一些简单的事情,但在格式为“对象”的日期列的“to_datetime”转换过程中,我遇到了此类型错误。我尝试了此代码的不同变体,但仍然遇到相同的错误。我正在使用 PyCharm IDE。
尝试对包含 279 个文件的数据集执行 Kfold cv,执行 k 均值后,文件的形状为 ( 279 , 5 , 90) 。我重新调整了它的形状,以便适合 svm。现在的形状是(279, 5*90)。
我在这里使用 Arjun Comar 版本的 OpenCV 3.0 https://github.com/arjuncomar/opencv ...Arjun Comar 更新了此版本的 OpenCV
以下代码: x = list(range(0,10)) random.shuffle(x) ind = np.argsort(x) x[ind] 产生错误:TypeError: only intege
这个问题在这里已经有了答案: Concatenating two one-dimensional NumPy arrays (6 个答案) 关闭 5 年前。 我想将 numpy 数组存储到另一个 n
我有一个 PyTorch LSTM 模型,我的forward 函数如下所示: def forward(self, x, hidden): print('in forward',
我正在尝试通过 PyTorch 训练分类器。但是,当我向模型提供训练数据时,我遇到了训练问题。我在 y_pred = model(X_trainTensor) 上收到此错误: RuntimeError
我是一名优秀的程序员,十分优秀!