我是EE本科生,我正在研究一个需要我检测道路(主要是转弯)的项目.要求是,给定GPS坐标和转弯方向,机器人应该能够将其导航到给定点.问题是GPS坐标非常不准确,道路并不总是直的.所以我将不得不检测道路的两侧并相应地导航我的机器人.
我想在机器人的两侧安装两个摄像头.通常用于将机器人保持在道路中心,当机器人转弯5米时,其中一个摄像机将引导它通过转弯.
我将使用raspberry pi,但出于测试目的,我在运行Ubuntu的笔记本电脑上安装了simplecv和opencv.我完全没有计算机视觉方面的经验.我不知道从哪里开始.有人可以指导我完成上述任务的算法吗?我应该使用simplecv还是opencv?Python还是C++?我个人喜欢python上的simplecv,但我不知道它是否能够完成任务.
任何帮助,将不胜感激.把我放在正确的轨道上!
编辑:理想的条件,没有交通,没有障碍.道路宽度不变.
我一直在使用SimpleCV来查找与自动驾驶机器人一起使用的blob.问题是当我在SimpleCV中调用findBlobs命令时.当我完全阻挡Kinect相机的镜头时,PyGame崩溃给我这个错误:
致命的Python错误:( pygame降落伞)分段错误
有时它会起作用,有时甚至会在镜头解锁时崩溃.当我运行超过大约30秒时,它几乎总会崩溃.我已经在SimpleCV中重新安装并修复了许多问题,并尝试重新安装Pygame,它似乎没有任何帮助.另外,我使用X-Box kinect作为我的相机源.我正在使用Ubuntu 11.04.
这是我的确切代码:
from SimpleCV import *
from SimpleCV.Display import *
from time import sleep
k = Kinect()
dis = Display()
while 1:
depth = k.getDepth()
depth = depth.invert()
depth = depth.erode()
blobs = depth.findBlobs(threshval=127, minsize=10, maxsize=0)
if blobs:
blobs.draw()
depth.save(dis)
sleep(0)
Run Code Online (Sandbox Code Playgroud) 一旦发现了嘴巴区域,人们通常如何提取嘴唇的形状(在我的情况下,是使用haar级联)?我尝试了颜色分割和边缘/角落检测,但对我来说它们非常不准确。我需要找到两个角以及位于中心的上下唇。我听说过有关活动外观模型的信息,但是我在理解如何将其与python结合使用时遇到了麻烦,并且我没有足够的上下文来确定这是否是检测嘴唇不同部位的常规方法。这是我的最佳选择,还是我还有其他选择?如果我应该使用它,如何使用python和simplecv开始使用它?
我最近不得不在Python中做很多与视觉相关的工作,而且我在格式之间切换时遇到很多困难.当我使用Mahotas读取图像时,我似乎无法将其转换为cv2,尽管它们都使用numpy.ndarray.SimpleCV可以轻松获取OpenCV图像,但是为简单的cv或mahotas获取SimpleCV图像似乎是一项非常重要的任务.
一些格式转换语法将非常受欢迎.例如,如果我使用mahotas打开灰度图像,默认情况下会将其视为浮点颜色空间.即使我将类型指定为numpy.uint8,cv2似乎也无法将其识别为数组.我不知道如何解决这个问题.我对彩色图像也没有多少运气.我在Ubuntu Oneiric Ocelot上使用Python 2.7 32bit.
提前致谢!
我正在使用SimpleCV缝合图像.我在SimpleCV的GitHub代码中做了一些更改,最终正确地转换了图像.但问题是,变换后的图像颜色会发生变化.
我使用过这些图片http://imgur.com/a/lrGw4.我的代码输出是:http://i.imgur.com/2J722h.jpg
这是我的代码:
from SimpleCV import *
import cv2
import cv
img1 = Image("s.jpg")
img2 = Image("t.jpg")
dst = Image((2000, 1600))
# Find the keypoints.
ofimg = img1.findKeypointMatch(img2)
# The homography matrix.
homo = ofimg[1]
eh = dst.getMatrix()
# transform the image.
x = Image(cv2.warpPerspective(np.array((img2.getMatrix())), homo,
(eh.rows, eh.cols+300), np.array(eh), cv.INTER_CUBIC))
# blit the img1 now on coordinate (0, 0).
x = x.blit(img1, alpha=0.4)
x.save("rishi1.jpg")
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个基本脚本,使用SimplecCV 1.3.0和64位Linux Mint 12上的Logitech HD C270网络摄像头(也尝试过Logitech tessar 2.0/3.7)从我的网络摄像头获取数据.
当我运行以下脚本时
from SimpleCV import *
cam = Camera()
while(True):
img = cam.getImage()
img.show()
Run Code Online (Sandbox Code Playgroud)
弹出一个窗口,我可以看到相机输入.但是,在看似随机的时刻,Feed会冻结并在每个上面抛出以下错误img = cam.getImage()
VIDIOC_DQBUF: No such device
libv4l2: error dequeuing buf: No such device
Run Code Online (Sandbox Code Playgroud)
从那时起,当我尝试运行相同的脚本时,窗口会打开片刻,消失,并且我在img = cam.getImage()脚本行上出现以下错误:
File "/usr/lib/pymodules/python2.7/SimpleCV/Camera.py", line 579, in getImage
if (not self.threaded):
AttributeError: Camera instance has no attribute 'threaded'
Run Code Online (Sandbox Code Playgroud)
在我重新启动计算机之前,此错误仍然存在,无论我的网络摄像头是否已插入,都会出现此问题.尽管如此,其他网络摄像头软件(如奶酪)仍然可以与相机连接.
我一直在尝试使用SimpleCV(www.simplecv.org)模块来运行图像识别和操作.不幸的是,我传入的视频源非常挑剔,而且我不确定我做错了什么.只需使用一些基本的示例代码:
import cvwindow = cv.NamedWindow("camera", 1)
capture = cv.CreateCameraCapture(0)
width = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH))
height = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT))
while 1:
img = cv.QueryFrame(capture)
cv.ShowImage("camera", img)
k = cv.WaitKey(1)
if(k == 102):
cv.destroyWindow("camera")
break
Run Code Online (Sandbox Code Playgroud)
当我插入我的Logitech网络摄像头500时,它工作得很好.但是,当我尝试使用我的Vimicro Altair相机时,我得到一个灰色的屏幕,当保存到文件时,文件是空的.
我还尝试使用SimpleCV代码,根据他们的菜谱基于:
mycam = Camera()
img = mycam.getImage()
Run Code Online (Sandbox Code Playgroud)
这同样不成功,但是不返回任何数据,只返回一个完全黑色的图像.
我完全失去了造成这种情况的原因,我在笔记本电脑上尝试了完全相同的系统,甚至无法从Logitech摄像头获取图像.我正在使用Python 2.7和SimpleCV 1.1运行Windows 7 64位.
谢谢
我仍然通过网络摄像头拍摄了一晚的图像.大多数是相同的,因为图像中的照明是均匀的.然而,有些与其他人有显着差异 - 他们在框架中有明显的人体运动.
如何检测哪些图像明显不同,以便将运动包含在其中?更好的是,有没有一种专门检测运动的方法?
我猜测像OpenCV或SimpleCV这样的库可以很容易地实现这一点,但我不限于使用那些.
我刚刚安装了SimpleCV版本1.3 Superpack,它安装了Python 2.7并包含了所有库.我试图运行它,得到了这个错误
回溯(最近一次调用最后一次):
文件" G:\ images.py ",第1行,
来自SimpleCV的模块导入Camera
ImportError:没有名为SimpleCV的模块
是否有适用于Python 3.5的版本?
我有Windows 8.1 x64,谢谢!
所有,我有一个使用 OpenCV 校准相机的 python 脚本。它现在可以从 stackoverflow 帮助中获得很多帮助。但是,我在失真常数方面遇到了问题。我似乎无法控制适合的常量数量。我只想要 4 个失真常量,而不是 5 个。在文档中它指出“也就是说,如果向量包含四个元素,则意味着 K3=0”,这就是我想要的。所以我启动 dist_const = np.zeros(4),将其传递给 cv2.calibrateCamera,但返回的 dist_const 返回了 5 个常量。我也试过标志 CV_CALIB_FIX_K3,但不断收到“必须分配一个迭代器”错误。有没有人以前见过这种行为,任何帮助将不胜感激。
import cv2
from cv2 import cv
import numpy as np
obj_points = [[-9.7,3.0,4.5],[-11.1,0.5,3.1],[-8.5,0.9,2.4],[-5.8,4.4,2.7],[-4.8,1.5,0.2],[-6.7,-1.6,-0.4],[-8.7,-3.3,-0.6],[-4.3,-1.2,-2.4],[-12.4,-2.3,0.9],[-14.1,-3.8,-0.6],[-18.9,2.9,2.9],[-14.6,2.3,4.6],[-16.0,0.8,3.0],[-18.9,-0.1,0.3],[-16.3,-1.7,0.5],[-18.6,-2.7,-2.2]]
img_points = [[993.0,623.0],[942.0,705.0],[1023.0,720.0],[1116.0,645.0],[1136.0,764.0],[1071.0,847.0],[1003.0,885.0],[1142.0,887.0],[886.0,816.0],[827.0,883.0],[710.0,636.0],[837.0,621.0],[789.0,688.0],[699.0,759.0],[768.0,800.0],[697.0,873.0]]
obj_points = np.array(obj_points,'float32')
img_points = np.array(img_points,'float32')
w = 1680
h = 1050
size = (w,h)
camera_matrix = np.zeros((3,3),'float32')
camera_matrix[0,0]= 2200.0
camera_matrix[1,1]= 2200.0
camera_matrix[2,2]=1.0
camera_matrix[0,2]=750.0
camera_matrix[1,2]=750.0
dist_coefs = np.zeros(4,'float32')
retval,camera_matrix,dist_coefs,rvecs,tvecs = cv2.calibrateCamera([obj_points],[img_points],size,camera_matrix,dist_coefs,flags=cv.CV_CALIB_USE_INTRINSIC_GUESS)
print camera_matrix
print dist_coefs
Run Code Online (Sandbox Code Playgroud)
链接到我的另一个问题,有 dist_coefs 的结果,来自我试图用 python/opencv 替换的加州理工学院 matlab 代码。
约翰
我正在使用Python和SimpleCV(但也可以使用OpenCV)并且我有一个图像:

此外,我有一些像这样的小图像,它们是从原始图像中裁剪出来的:

假设第一个图像包含第二个图像,我希望在裁剪之前获得第一个图像坐标.我怎么能做到这一点?
simplecv ×11
python ×9
opencv ×8
image ×3
camera ×1
colors ×1
kinect ×1
mahotas ×1
matlab ×1
pygame ×1
python-2.7 ×1
python-3.x ×1
raspberry-pi ×1
webcam ×1