小编Hil*_*man的帖子

Python和OpenCV - 改进我的车道检测算法

我需要从视频中检测道路车道.这是我的方式.

  1. 通过切片图像确定感兴趣区域(ROI)(聚焦中间部分)
  2. 灰度ROI
  3. 将灰度级投资回报率与平均值相等 cv2.equalizeHist
  4. 将高斯模糊应用于(3)
  5. 阈值(4)使用 cv2.adaptiveThreshold
  6. Skeletonize(5)使用 skimage.morphology.skeletonize
  7. 适用cv2.HoughLines于(6)

对于cv2.HoughLines,我设置为:

  1. 如果rho是正的(这意味着直线向右倾斜(自下而上),它只会绘制线条,如果它处于某个角度(我设置了角度的范围))
  2. 如果rho是负数(直线向左倾斜(自下而上),只有在特定角度时才会绘制直线)

这是我绘制线条的代码:

lines = cv2.HoughLines(image_bin, 1, np.pi/180, 50)
    try:
        range = lines.shape[0]
    except AttributeError:
        range = 0

    for i in xrange(range):
        for rho, theta in lines[i]:
            if rho > 0 and (np.pi*1/10 < theta < np.pi*4/10):
                a = np.cos(theta)
                b = np.sin(theta)
                x0 = a * rho
                y0 = b * rho
                x1 = int(x0 + 1000 * (-b)) …
Run Code Online (Sandbox Code Playgroud)

python algorithm opencv image-processing hough-transform

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

C编程中前向声明的意义是什么?

我现在通过Zed A. Shaw的"学习C艰难之路"学习C编程.有这个代码(取自他的网站):

#include <stdio.h>
#include <ctype.h>

// forward declarations
int can_print_it(char ch);
void print_letters(char arg[]);

void print_arguments(int argc, char *argv[])
{
    int i = 0;

    for(i = 0; i < argc; i++) {
        print_letters(argv[i]);
    }
}

void print_letters(char arg[])
{
    int i = 0;

    for(i = 0; arg[i] != '\0'; i++) {
        char ch = arg[i];

        if(can_print_it(ch)) {
            printf("'%c' == %d ", ch, ch);
        }
    }

    printf("\n");
}

int can_print_it(char ch)
{
    return isalpha(ch) || isblank(ch);
}


int main(int …
Run Code Online (Sandbox Code Playgroud)

c forward-declaration

10
推荐指数
2
解决办法
2369
查看次数

为什么需要使用索引访问Python的OpenCV的cv2.HoughLines的返回值?

我希望我写的题目是正确的,因为我不知道如何准确地解释它.考虑下面的代码:

lines = cv2.HoughLines(edges,1,np.pi/180,200)
for rho,theta in lines[0]:
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a*rho
    y0 = b*rho
    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))

    cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)
Run Code Online (Sandbox Code Playgroud)

为什么要写for rho,theta in lines[0]:?通过这种代码,我只能获得一行.我试图删除索引,lines但我得到了ValueError: need more than 1 value to unpack.我试图打印返回的值,它看起来像这样:

[[[ 287.            1.97222209]]

[[ 885.            1.20427716]]

[[ 881.            1.22173047]]]
Run Code Online (Sandbox Code Playgroud)

我有点解决了这个问题,我的代码看起来像这样:

lines = cv2.HoughLines(edges,1,np.pi/180,200)
for i in range(10):
    for rho,theta in lines[i]:
Run Code Online (Sandbox Code Playgroud)

我想知道,到底发生了什么?或者我在这里做错了什么?

python opencv hough-transform

9
推荐指数
2
解决办法
3483
查看次数

C++ - 使用std :: string的统一初始化程序

我正在尝试使用C++字符串类的统一初始化程序.以下是代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str1 {"aaaaa"};
    string str2 {5, 'a'};
    string str3 (5, 'a');

    cout << "str1: " << str1 << endl;
    cout << "str2: " << str2 << endl;
    cout << "str3: " << str3 << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出将是:

str1: aaaaa
str2: a
str3: aaaaa
Run Code Online (Sandbox Code Playgroud)

这让我摸不着头脑.为什么str2不能达到预期的效果str3呢?

c++ string uniform-initialization c++11 list-initialization

9
推荐指数
2
解决办法
945
查看次数

Ubuntu 16.04 - 为什么我无法安装libtiff4-dev?

教程之后,我尝试在Ubuntu 16.04上使用Python安装OpenCV 3.

在进入的步骤 $ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev

我收到了这条消息:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libtiff4-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  libtiff5-dev:i386 libtiff5-dev

E: Package 'libtiff4-dev' has no installation candidate
Run Code Online (Sandbox Code Playgroud)

这是因为我使用的是Ubuntu的最新LTS版本(作者使用的是Ubuntu 14.04)?如果我只是安装libtiff5-dev(我的意思是,它会影响我将从现在开始构建的OpenCV操作)吗?

python ubuntu opencv libtiff

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

Python和OpenCV - 无法编写可读的avi视频文件

我有这样的代码:

import numpy as np
import cv2


cap = cv2.VideoCapture('C:/Users/Hilman/haatsu/drive_recorder/sample/3.mov')

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)

        # write the flipped frame
        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

但是output.avi无法播放.

尝试也改变了out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480))这样的事情(正如一些人所建议的那样)out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480)) …

python opencv ffmpeg avi windows-10

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

Python和OpenCV-在特定点获取视频的持续时间

假设我已经编写了一个程序来检测视频中的绿色球。每当检测到一个绿色球时,我都希望打印出检测到绿色球时的视频时长。可能吗?

python video opencv

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

C++ - 在std :: cin.getline()中使用'dot'运算符意味着什么?

我习惯用Python编程,因为在Python中,所有都是对象,当在变量的末尾.使用运算符来访问a时,它是完全可以接受methodclass.但是在C++中,比方说,这std::cin.getline()是某种访问成员函数的cin吗?

cin某种class或某种struct

c++

-5
推荐指数
1
解决办法
239
查看次数