小编alk*_*asm的帖子

如何检测opencv中的行?

我试图检测停车线,如下所示

空的停车场

我希望得到的是交叉线上清晰的线条和(x,y)位置,但结果并不是很有希望

停车场与霍夫线绘制

我想这是由于两个主要原因

  1. 有些线条非常破碎或缺失甚至人眼都可以清楚地识别它们.(即使HoughLine可以帮助连接一些丢失的行,因为HoughLine有时会将不必要的行连接在一起,所以我宁愿手动完成它)

  2. 有一些重复的线条

工作的一般管道如下所示

1.选择一些特定的颜色(白色或黄色)

import cv2
import numpy as np
import matplotlib
from matplotlib.pyplot import imshow
from matplotlib import pyplot as plt

# white color mask
img = cv2.imread(filein)
#converted = convert_hls(img)
image = cv2.cvtColor(img,cv2.COLOR_BGR2HLS)
lower = np.uint8([0, 200, 0])
upper = np.uint8([255, 255, 255])
white_mask = cv2.inRange(image, lower, upper)
# yellow color mask
lower = np.uint8([10, 0,   100])
upper = np.uint8([40, 255, 255])
yellow_mask = cv2.inRange(image, lower, upper)
# combine the mask
mask = cv2.bitwise_or(white_mask, yellow_mask) …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing

29
推荐指数
4
解决办法
3万
查看次数

模块'sklearn'没有属性'cross_validation'

我试图将我的数据集拆分为训练和测试数据集,但我收到此错误:

X_train,X_test,Y_train,Y_test = sklearn.cross_validation.train_test_split(X,df1['ENTRIESn_hourly'])
Run Code Online (Sandbox Code Playgroud)
AttributeError                            Traceback (most recent call last)
<ipython-input-53-5445dab94861> in <module>()
----> 1 X_train,X_test,Y_train,Y_test = sklearn.cross_validation.train_test_split(X,df1['ENTRIESn_hourly'])

AttributeError: module 'sklearn' has no attribute 'cross_validation'
Run Code Online (Sandbox Code Playgroud)

我怎么处理这个?

python scikit-learn cross-validation

27
推荐指数
2
解决办法
3万
查看次数

从2d图像的3d点重建

我正在尝试从2d立体图像中理解3d点重建的基础知识.到目前为止我所理解的可归纳如下:

对于3d点(深度图)重建,我们需要来自2个不同视图的同一对象的2个图像,给定这样的图像对我们还需要相机矩阵(比如P1,P2)

  • 我们使用SIFT或SURF等方法在两个图像中找到相应的点.

  • 在得到相应的关键点后,我们发现使用最少8个关键点(用于8点算法)找到基本矩阵(比如K)

  • 鉴于我们在相机1,计算相机2的参数使用基本矩阵返回4个可能的相机参数

  • 最后,我们使用三角测量法使用相应的点和两个相机参数进行三维点估计.

在完成理论部分后,作为我的第一个实验,我尝试运行此处提供的代码,其工作正常.在example.py代码中进行了一些修改后,我尝试在所有连续图像对上运行此示例,并合并三维点云以进行对象(dino)的三维重建,如下所示:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import cv2

from camera import Camera
import structure
import processor
import features

def dino():
    # Dino
    img1 = cv2.imread('imgs/dinos/viff.003.ppm')
    img2 = cv2.imread('imgs/dinos/viff.001.ppm')
    pts1, pts2 = features.find_correspondence_points(img1, img2)
    points1 = processor.cart2hom(pts1)
    points2 = processor.cart2hom(pts2)

    fig, ax = plt.subplots(1, 2)
    ax[0].autoscale_view('tight')
    ax[0].imshow(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB))
    ax[0].plot(points1[0], points1[1], 'r.')
    ax[1].autoscale_view('tight')
    ax[1].imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB))
    ax[1].plot(points2[0], points2[1], 'r.')
    fig.show()

    height, width, ch = …
Run Code Online (Sandbox Code Playgroud)

python image-processing computer-vision 3d-reconstruction

14
推荐指数
2
解决办法
2147
查看次数

失败了最简单的cv2.remap()测试,又名.我如何在python中使用remap()?

这是remap()最简单的测试用例:

import cv2
import numpy as np
inimg = np.arange(2*2).reshape(2,2).astype(np.float32)
inmap = np.array([[0,0],[0,1],[1,0],[1,1]]).astype(np.float32)
outmap = np.array([[10,10],[10,20],[20,10],[20,20]]).astype(np.float32)
outimg = cv2.remap(inimg,inmap,outmap,cv2.INTER_LINEAR)
print "inimg:",inimg
print "inmap:",inmap
print "outmap:",outmap
print "outimg:", outimg
Run Code Online (Sandbox Code Playgroud)

这是输出:

inimg: [[ 0.  1.]
 [ 2.  3.]]
inmap: [[ 0.  0.]
 [ 0.  1.]
 [ 1.  0.]
 [ 1.  1.]]
outmap: [[ 10.  10.]
 [ 10.  20.]
 [ 20.  10.]
 [ 20.  20.]]
outimg: [[ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]]
Run Code Online (Sandbox Code Playgroud)

如你所见,outimg产生0,0,它甚至没有正确的形状.我期望20x20或10x10图像的插值从0到3.

我已经阅读了所有文档.它和SO上的每个人都会输入一个起始点的数组(地图),一个结束点的地图,然后重映射()会将img中的所有值放入新的位置,插入任何空白空间.我这样做,但它不起作用.为什么?大多数示例都适用于C++.它在python中被打破了吗?

python opencv remap

11
推荐指数
2
解决办法
9920
查看次数

如何展平pandas数据框中的数组

假设我有一个 pandas 数据框,例如

df_p = pd.DataFrame(
   {'name_array':
    [[20130101, 320903902, 239032902],
     [20130101, 3253453, 239032902],
     [65756, 4342452, 32425432523]],
    'name': ['a', 'a', 'c']} )
Run Code Online (Sandbox Code Playgroud)

数据框图像

我想提取包含每行中的展平数组的系列,同时保留顺序

预期结果是pandas.core.series.Series

预期输出图像

这个问题不是重复的,因为我的预期输出是 pandas 系列,而不是数据框。

python series flatten pandas

5
推荐指数
2
解决办法
2万
查看次数

OpenCV Transformationmatrix:仿射与透视变形

嗨,我目前正在图像转换,但是关于变形我有一件事我不明白。即warpAffine()和之间有什么区别warpPerspective()

那样的话,我根本不是说转换中的区别是什么。我的问题是为什么我可以在上述两个函数中使用相同的转换矩阵(3x3)?并且输出是否相同(如果使用相同的转换矩阵运行)

或何时使用一个,何时另一个?

opencv transform

4
推荐指数
1
解决办法
2131
查看次数

在调整图像大小后查找点的新坐标

我已将图像调整为大小newX, newY.在调整大小之前,我有一点意见(x,y).现在我已经调整了我的图像大小,我想知道新图像的重点.听起来很简单,但我的数学很差.有任何想法吗?

python opencv

4
推荐指数
1
解决办法
2710
查看次数

使用warpAffine将拼接图像显示在一起而不会中断

我试图通过使用模板匹配将2个图像拼接在一起找到3组点,我通过这些点来cv2.getAffineTransform()获得一个经线矩阵,我将其传递cv2.warpAffine()到对齐我的图像.

然而,当我加入我的图像时,我的大部分仿射图像都没有显示出来.我已经尝试过使用不同的技术来选择点,改变顺序或参数等等,但我只能得到一张瘦弱的图像来显示.

有人可以告诉我,我的方法是否有效,并建议我可能会出错?任何关于可能导致问题的猜测都将非常感激.提前致谢.

这是我得到的最终结果.下面是原始图像(1,2),并且我使用的代码:

编辑:这是变量的结果 trans

array([[  1.00768049e+00,  -3.76690353e-17,  -3.13824885e+00],
       [  4.84461775e-03,   1.30769231e+00,   9.61912797e+02]])
Run Code Online (Sandbox Code Playgroud)

以下是传递给我们的观点cv2.getAffineTransform:unified_pair1

array([[  671.,  1024.],
       [   15.,   979.],
       [   15.,   962.]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

unified_pair2

array([[ 669.,   45.],
       [  18.,   13.],
       [  18.,    0.]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
import cv2
import numpy as np


def showimage(image, name="No name given"):
    cv2.imshow(name, image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    return

image_a = cv2.imread('image_a.png')
image_b = cv2.imread('image_b.png')


def get_roi(image):
    roi = cv2.selectROI(image) # spacebar to confirm …
Run Code Online (Sandbox Code Playgroud)

opencv image-stitching

3
推荐指数
1
解决办法
3849
查看次数

为特定的 x 轴刻度设置不同的字体颜色

我正在创建一个频率图,其中也绘制了 NA 值。我试图在 x 轴刻度中以不同的方式为 N/A 值着色。我知道如何在 matplotlib 中做到这一点,但似乎无法弄清楚如何使用 plotly 来做到这一点。

我尝试使用值列表更新 tickcolors 和 tickfonts,但它只需要这两个属性的单个值。请看下面的代码

# Doesn't work - plotly expects a single value for tickcolor
fig.update_xaxes(
    tickangle = -60, 
    tickcolor = ['black', 'black', 'black', 'black', 'red']
)

# In matplotlib the following code works fine
# It checks the text for xticklabels and changes color if it equals 'N/A'

  _  = [xl.set_color('red') for xl in plt.gca().get_xticklabels() if xl.get_text() == 'N/A / Missing']


Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样 - 这是我的 matplotlib 代码预期输出的输出

python matplotlib plotly

3
推荐指数
1
解决办法
2165
查看次数

了解和评估模板匹配方法

OpenCV具有matchTemplate()通过在输出上滑动模板输入并生成与匹配项对应的数组输出来运行的功能。

在哪里可以了解有关如何解释六个TemplateMatchModes的更多信息?

我已根据本教程通读并实现了代码,但除了理解一个人在寻找TM_SQDIFF匹配的最小结果而在其余情况中寻找最大的结果之外,我不知道如何解释不同的方法以及一个方法的情况。会选择一个。

例如(取自本教程)

res = cv.matchTemplate(img_gray, template, cv.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where(res >= threshold)
Run Code Online (Sandbox Code Playgroud)

R(x,y)= ?x?,y? (T?(x?,y?) ? I?(x+x?,y+y?))
        ?????????????????????????????????-------------
       sqrt(?x?,y? T?(x?,y?)^2 ? ?x?,y? I?(x+x?,y+y?)^2)
Run Code Online (Sandbox Code Playgroud)

(摘自文档页面;不确定如何进行公式格式化)

我推断这TM_CCOEFF_NORMED将返回0到1之间的值,并且0.8阈值是任意的,但这只是假设。

是否需要更深入地研究在线方程式,针对标准数据集的性能度量,或有关不同模式以及何时以及为何使用一种模式的学术论文?

python opencv convolution template-matching

3
推荐指数
1
解决办法
300
查看次数

你如何将图像/数组分成块?

我想知道是否可以将图像分成块,例如 8x8 块(64 pixels per block)并为每个块执行直方图功能并将结果保存到新图像中而不是单独的图像?

def apply_histogram(block):
    h, b = np.histogram(block.flatten(), 256, normed=True)
    cdf = h.cumsum()
    cdf = 255 * cdf / cdf[-1]
    return np.interp(block.flatten(), b[:-1], cdf).reshape(block.shape)
Run Code Online (Sandbox Code Playgroud)

python numpy

1
推荐指数
1
解决办法
2892
查看次数

如何在 cv2.ellipse 图形中填充颜色?

我有这个代码。它获取图像并在定义的点上绘制椭圆。就像这个示例一样。但我正在努力弄清楚如何填充颜色?

def annotate_image(annotations, i):
   file_name = annotations[i][0]
   PATH= "/content/content/train/Class1_def/"+file_name+'.png'
   img=cv2.imread(PATH)
   #print(img.shape)
   img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
   semi_major= int(float(annotations[i][1]))
   semi_minor= int(float(annotations[i][2]))
   rotation= int(float(annotations[i][3]))
   x_pos_ellip= int(float(annotations[i][4]))
   y_pos_ellip= int(float(annotations[i][5]))
   center_coordinates= (x_pos_ellip, y_pos_ellip)
   axesLength= (semi_major,semi_minor)
   angle= int(float(rotation))
   startAngle = 0
   endAngle = 360
   # Red color 
   color = (255, 0, 0)  
   # Line thickness 
   thickness = 2    
   cv2.ellipse(img, center_coordinates, axesLength, 
       angle, startAngle, endAngle, color, thickness) 

   return img
Run Code Online (Sandbox Code Playgroud)

python opencv

0
推荐指数
1
解决办法
2374
查看次数