我在使用 intel core i7-4510u 的 Kali linux 上运行此脚本:
import cv2
from datetime import datetime
vid_cam = cv2.VideoCapture(0)
vid_cam.set(cv2.CAP_PROP_FPS, 25)
vid_cam.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
vid_cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 360)
lastDate = datetime.now().second
fcount = 0
while(vid_cam.isOpened()):
if(datetime.now().second>lastDate):
lastDate = datetime.now().second
print("Fps: " + str(fcount))
fcount = 0
else:
fcount += 1
ret, image_frame = vid_cam.read()
cv2.imshow('frame', image_frame)
if cv2.waitKey(100) & 0xFF == ord('q'):
break
vid_cam.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
如果我运行它,它会打印Fps: 4。
如果我检查任务管理器,我的 cpu 大约为 2%。
问题可能出在哪里?
我将根据一系列数据制作实时曲线。首先,我建立了一个数量字典,里面有3组数据。当前程序可以动态绘制曲线。X轴还可以显示时间,时间也是实时更新的。但是,X 轴上不同点的时间总是相同的值。
UNIX_EPOCH_naive = datetime.datetime(1970, 1, 1, 0, 0) #offset-naive datetime
UNIX_EPOCH_offset_aware = datetime.datetime(1970, 1, 1, 0, 0, tzinfo = pytz.utc) #offset-aware datetime
UNIX_EPOCH = UNIX_EPOCH_naive
TS_MULT_us = 1e6
def now_timestamp(ts_mult=TS_MULT_us, epoch=UNIX_EPOCH):
return(int((datetime.datetime.utcnow() - epoch).total_seconds()*ts_mult))
def int2dt(ts, ts_mult=TS_MULT_us):
tz = pytz.timezone('Asia/Shanghai')
user_ts = int(time.time())
d1 = datetime.datetime.fromtimestamp(float(user_ts))
d1x = tz.localize(d1)
return(d1x)
def dt2int(dt, ts_mult=TS_MULT_us, epoch=UNIX_EPOCH):
delta = dt - epoch
return(int(delta.total_seconds()*ts_mult))
def td2int(td, ts_mult=TS_MULT_us):
return(int(td.total_seconds()*ts_mult))
def int2td(ts, ts_mult=TS_MULT_us):
return(datetime.timedelta(seconds=float(ts)/ts_mult))
class TimeAxisItem(pg.AxisItem):
def __init__(self, *args, **kwargs):
super(TimeAxisItem, self).__init__(*args, **kwargs)
def tickStrings(self, …
Run Code Online (Sandbox Code Playgroud) 我正在研究一个文本识别项目。文本有可能旋转 180 度。我在终端上尝试过 tesseract-ocr,但没有成功。有什么方法可以检测并纠正吗?文本示例如下所示。
tesseract input.png output
Run Code Online (Sandbox Code Playgroud) 我正在使用pyqtgraph,它使用鼠标滚轮具有开箱即用的缩放行为。然而,对于我的应用程序,我只需要放大 x 或 y 方向。
我希望做到以下几点:
在 pyqtgraph 中解决这个问题的最佳方法是什么?
我正在开发的应用程序可以编辑视频文件并将它们合并到 AVComposition 中。这是以一种非常直接的方式完成的,该方式已被详细记录:创建 AVMutableComposition...创建视频和音频轨道。将视频和音频片段插入到这些轨道上。创建一个 AVVideoComposition 对象。用图层指令填充它。
我现在有兴趣向我的 AVComposition 添加过滤器(将在 AVPlayer 中呈现,然后导出到 mp4 文件)。
我能找到的向 AVComposition 添加过滤器的唯一方法是使用 AVMutableVideoComposition 的 videoCompositionWithAsset:applyingCIFiltersWithHandler 初始值设定项。
然而,正如其他人所指出的,以这种方式初始化 AVMutableVideoComposition 不允许稍后添加必要的层指令。
更重要的是,我找不到一种方法来指定分配的过滤器的起点和持续时间(但此时这对我来说不是什么问题)。
我发现的有关在 AVFoundation 中使用过滤器的所有资源都不使用合并视频,而是将过滤器应用于一个视频资产。我尝试使用 AVComposition 作为该资产,但无法使用我的图层指令,结果是无用的。
知道如何创建这样一个合并视频的组合,并且还能够应用过滤器(棕褐色......,亮度等......)。
谢谢
我找到了这个链接,但不清楚: How to use layer instructions into videoCompositionWithAsset:applyingCIFiltersWithHandler method
当尝试初始化时
我收到以下错误/异常:
[AVCoreImageFilterCustomVideoCompositor startVideoCompositionRequest:] 期望视频合成仅包含 AVCoreImageFilterVideoCompositionInstruction'
我已尽力找出如何使用OpenCV进行线路检测。但是,我找不到所需的示例。我想用它在简单的二维点云中找到线。作为测试,我想使用以下几点:
import random
import numpy as np
import matplotlib.pyplot as plt
a = np.random.randint(1,101,400) # Random points.
b = np.random.randint(1,101,400) # Random points.
for i in range(0, 90, 2): # A line to detect
a = np.append(a, [i+5])
b = np.append(b, [0.5*i+30])
plt.plot(a, b, '.')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我已经找到了有关霍夫变换如何工作的许多初始示例。但是,当涉及到代码示例时,我只能发现已使用图像。
有没有一种方法可以使用OpenCV Hough变换来检测一组点中的线,或者可以推荐其他方法或库吗?
----编辑----
阅读了一些很好的答案之后,我觉得我应该描述一下我打算使用它的目的。我有高分辨率的2D LiDAR,需要从数据中提取墙。打字扫描如下所示:
在进行了更多研究之后,我怀疑霍夫变换在这种情况下使用效果不佳。关于我应该寻找的任何提示?
(如果有人感兴趣,可以使用LiDAR和墙面提取来生成地图并导航机器人。)
谢谢,雅各布
我想裁剪出图像中充满小曲线的区域。
我尝试使用膨胀将这些像素连接到所需区域,但结果并不令人满意。
opencv中是否有任何功能可以找到该区域?
我有一种情况,我想在黑色背景的情况下检测白线,在白色背景的情况下检测黑线。我使用了如下的 bitwise_not 操作:
cv2.bitwise_not(mask_black)
Run Code Online (Sandbox Code Playgroud)
它工作得很好,直到并且除非我给出这样的条件:
if mask_black == cv2.bitwise_not(mask_black):
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
我对使用条件有疑问,如果出现黑色背景,则将检测到白线;如果出现白色背景,则将检测到黑线
mask_black = cv2.inRange(hsv, low_black, high_black)
mask_not=cv2.bitwise_not(mask_black)
if mask_black==cv2.bitwise_and(mask_black, mask_not):
body
else:
body
Run Code Online (Sandbox Code Playgroud)
这将返回上述错误
这是卡车集装箱的俯视图。首先,我需要找到矩形并知道每个角的位置。目标是了解容器的尺寸。
我有一组来自对象检测系统的边界框。它们的格式如下:
[[x,y], [x,y], [x,y], [x,y]]
Run Code Online (Sandbox Code Playgroud)
我想找到最大的边界框,该边界框既不与任何其他提供的框相交,也不位于排除的框内。
我正在使用 python,但欢迎使用任何编程语言进行回复:)
迭代每个点并找到 x 和 y 的最小值和最大值。
然后使用这些坐标裁剪为多边形。
问题是示例图像上的算法会删除图像的顶部部分,但没有必要这样做,因为我们“错过”了左上角和右上角的框。
尝试选择一次仅裁剪一侧,因为通常在我的数据集中要排除的内容都在一侧。例如删除顶部 100px
所以我像以前一样计算了 x 和 y 的最小值和最大值。然后计算每个可能切割的面积 - 左、右、上、下,并选择面积最小的一个。
当图片两侧(如左右两侧)都有方框时,这种方法很快就会失败