小编use*_*339的帖子

给定轮廓勾勒出OpenCV/Python中'S'形状的边缘,可以使用哪些方法沿形状中心追踪曲线?

如果轮廓勾勒出字母S的边缘(例如,在漫画中),我怎么能沿着这个字母的书脊获得一系列点,以便稍后使用直线,三次样条或其他曲线表示技术来表示这个形状? 我想在Python/OpenCV中使用30-40个点来处理和表示形状.

形态骨架化可能有助于此,但操作似乎总是产生错误的分支.有没有更好的方法将轮廓折叠成字母的'S'形状?

在此输入图像描述

在下面的例子中,您可以看到错误的"蛇的舌头",就像形态骨架化产生的分支一样.我不知道如果这是算法应该做的事情是否错误是公平的,但对我来说,我不希望他们在那里.

在此输入图像描述

以下是漫画sans字母:

在此输入图像描述

骨架化的另一个问题是它的计算成本很高,但是如果你知道一种方法可以使它像分支一样形成"蛇舌",那么我会尝试一下.

python opencv image-processing computer-vision morphological-analysis

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

使用 OpenCV 获取帧时,如何测试相机的实际分辨率?

我正在使用 Python/OpenCV,从 USB 网络摄像头(Logitech C615 摄像头,据说是 HD 1080p)获取帧。1080p 的纵横比为 16:9,因此我应该能够以所有这些分辨率获取图像:

1920 x 1080
1600 x 900
1366 x 768
1280 x 720
1024 x 576
Run Code Online (Sandbox Code Playgroud)

然而,我没有编写相机驱动程序,所以我怎么知道我是否真的从相机中获取了这些像素?例如,我可以指定 3840 x 2160 并获得该大小的视频帧!

鉴于这些不同的分辨率设置,是否有一种系统的方法可以评估/确定相机的实际分辨率或有效分辨率?下面是一些用于演示的 Python/OpenCV 代码。

import numpy as np
import cv2, cv
import time

cap = cv2.VideoCapture(0) # note you may need to pass 1 instead of 0 into this to get your camera  

cap.set(3,3840)     #horizontal pixels
cap.set(4,2160)     #vertical pixels
cap.set(5, 15)      #frame rate
time.sleep(2)       #trying to solve a delay issue ... …
Run Code Online (Sandbox Code Playgroud)

python camera opencv image-processing

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

为什么我的轮廓没有被opencv完全填满?

我正在处理看起来像这样的视频(这些是移动的blob):

在此输入图像描述

我成功地能够在opencv中进行基本处理,找到blob周围的轮廓,在它们周围画圆圈等.下面是在原始视频帧的倒置图像上绘制的一些跟踪信息:

在此输入图像描述

我想对这些移动的斑点序列进行投影,这样我就可以得到一个带有斑点运动黑色痕迹的图像.我称之为blob轨道.我认为我正在使用术语"投影",因为如果这是一个3d堆栈,它将被称为"z投影"(此时只有投影通过视频中的时间/帧).

当我这样做的时候,我得到了一个接近我想要的斑点轨迹的图像,但是里面有一些微小的绿色像素,我不希望在那里,考虑到我用黑色填充轮廓然后合并这些填充的轮廓.我得到这样的东西:

在此输入图像描述

请注意blob轨道内存在的小绿色像素.它们可能看起来很微妙,但我不希望它们存在,并且无法弄清楚为什么它们在那里,因为我在代码中所做的就是在另一个上面加盖黑色斑点.它们是绿色的这一事实向我暗示它们是我绘制斑点轨迹的绿色背景图像的一部分.

我知道我的填充工作正在工作,因为如果我采用单帧而不是制作blob轨道,我会得到这个,看起来不错:

在此输入图像描述

我正在进行投影的方式(通过时间添加填充轮廓)必定会出现问题.

单帧的代码(工作和上面显示)是:

cv2.drawContours(contourimage,bigbadlistofcontours[0],-1,(0,0,0),-1)
Run Code Online (Sandbox Code Playgroud)

哪里contourimage是我的框架大小的绿色图像,bigbadlistofcontours [0]是我的轮廓列表中的第一个条目,你可以看到bigbadlistofcontours [0]包含两个轮廓,代表上面成功绘制的两个blob.

用于添加/投影多个帧(不工作且内部具有这些小绿色像素)的代码是:

for xx in bigbadlistofcontours:
    cv2.drawContours(contourimage,xx[0],-1,(0,0,0),-1)
    cv2.drawContours(contourimage,xx[1],-1,(0,0,0),-1)
    #cv2.fillPoly(contourimage, pts =xx[0], color=(0,0,0))
    #cv2.fillPoly(contourimage, pts =xx[1], color=(0,0,0))
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我尝试使用两种方法 - 一种使用drawContours,另一种使用fillPoly.两者都在blob轨道内产生不应该存在的小像素.知道什么可能导致这些像素存在吗?

python opencv image-processing

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

为什么我的ctypes长度为4而不是使用64位python的8号?

在这个下游,我得到一个错误Python int too large to convert to C long,这让我怀疑,不知何故ctypes长度太小 - 大小4而不是8.

我对此进行了测试,确实如此.然而,我使用的是Python 2.7 64位(Anaconda).

import ctypes as C
import os
import platform
import numpy as np

print "Python Platform Architecture: ", platform.architecture()[0]
print "Size of ctypes long: ", (C.sizeof(C.c_long))
Run Code Online (Sandbox Code Playgroud)

这是输出:

Python Platform Architecture:  64bit
Size of ctypes long:  4
Run Code Online (Sandbox Code Playgroud)

python ctypes anaconda

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

在Python中,如何通过任意增量进行for循环计数?

范围内功能对我不起作用:

for x in range(0, 10):
    print str(x)
Run Code Online (Sandbox Code Playgroud)

如果我想用两个(​​或其他离散增量)计数怎么办?在Java或C中,这很简单,但在Python中,您还可以在循环的每次迭代中设置计数器的增量吗?

python loops for-loop

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

导入zbar导致python以退出代码139退出 - 这可能导致在运行10.9的mac上出现这种情况?

我试图让我的opencv工作流程中的QR码识别,但程序立即退出代码139.

import zbar 导致问题,因为当我删除它时,我的后续opencv代码执行.

我该如何诊断?它似乎是在/Library/Python/2.7/site-packages/中找到zbar python包(即没有声称包不存在),但随后它以代码139退出.任何想法代码139是什么?这个问题可能出现在python绑定,zlib.h或其他地方吗?

python绑定包位于/Library/Python/2.7/site-packages/中:

zbar-0.10-py2.7.egg-info
zbar.so
Run Code Online (Sandbox Code Playgroud)

python macos qr-code image-processing zbar

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

当从numpy数组(opencv图像)获得ROI时,为什么img [y0:y1,x0:x1]似乎使用不一致的指标范围?

OpenCV使用numpy数组来存储图像数据.在这个问题和接受的答案中,我被告知要访问图像中感兴趣的子区域,我可以使用该表格roi = img[y0:y1, x0:x1].

我很困惑,因为当我在终端中创建一个numpy数组并进行测试时,我似乎没有得到这种行为.下面我想得到roi [[6,7], [11,12]],在哪里y0 = index 1, y1 = index 2,和x0 = index 0, x1 = index 1.

在此输入图像描述

为什么我得到我想要的东西arr[1:3, 0:2]呢?我期望得到它arr[1:2, 0:1].

似乎当我切割n-by-n ndarray [a:b,c:d]时,a和c是预期的指标范围0..n-1,但b和d是指数范围1..n .

python opencv numpy

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

为什么我的 Tk 按钮会被自动按下?

在下面的代码中,单击按钮应该将黑色文本从 Hello 更改为 Goodbye。但是当我运行程序时,它立即说再见。

在此处输入图片说明

from Tkinter import *
from tkMessageBox import *
print "this is a test"


class Demo(Frame):
    def __init__(self):
        self.createGUI()
        print "init"
        #self.__mainWindow = Tk()
    def destroy(self):
        print "destroy"
    def createGUI(self):
        Frame.__init__(self)
        self.pack(expand = YES, fill = BOTH)
        self.master.title("Demo")
        self.trackLabel = StringVar()
        self.trackLabel.set("Hello")
        self.trackDisplay = Label(self, font = "Courier 14", textvariable = self.trackLabel, bg = "black", fg = "green")
        self.trackDisplay.grid(sticky = W+E+N+S)
        self.button1 = Button(self, text = "Click Me", width = 10, command = self.bpress())
        self.button1.grid(row = 2, …
Run Code Online (Sandbox Code Playgroud)

python user-interface tk-toolkit tkinter

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

如何运行 time.sleep() 以分钟而不是秒为单位传递?

我正在制作一个计时器程序,想知道如何制作

      time.sleep(#)
Run Code Online (Sandbox Code Playgroud)

导致程序休眠 # 分钟而不是 # 秒?

python python-3.x

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