我在mat文件中有一个数据(观察和功能),我想将其加载到numpy 2D数组中。我不想先将其转换为csv,然后再将csv加载到numpy中。
我必须使用 Open CV - Python 跳到视频的特定部分,就像我们通常在普通视频播放器中看到的轨迹栏一样。如何创建可用于跳到视频特定部分的轨迹栏?
以及我们如何提高视频的帧率,使其看起来像加载的视频快进。
首先这里是我的代码:
image = cv2.imread(filePath)
height, width, channels = image.shape
# USing blob function of opencv to preprocess image
blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (416, 416),
swapRB=True, crop=False)
#Detecting objects
net.setInput(blob)
outs = net.forward(output_layers)
# Showing informations on the screen
class_ids = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.7:
# Object detected
center_x = int(detection[0] * width)
center_y = …Run Code Online (Sandbox Code Playgroud) 在我应用了一些处理之后,例如cv2.Canny(),它现在看起来像这样:

如您所见,黑线变为空心。我试过腐蚀和膨胀,但如果我多次这样做,两个入口将被关闭(意味着成为连接线或封闭轮廓)。
我怎样才能使这些线条像下图一样牢固,同时保持 2 个入口不受影响?
更新 1
我已经用几张照片测试了以下答案,但代码似乎是定制的,只能处理这张特定的图片。由于 SOF 的限制,我不能上传大于 2MB 的照片,所以我将它们上传到我的 Microsoft OneDrive 文件夹中,以方便您测试。
https://1drv.ms/u/s!Asflam6BEzhjgbIhgkL4rt1NLSjsZg?e=OXXKBK
更新 2
我拿起@fmw42 的帖子作为答案,因为他的答案是最详细的。它没有回答我的问题,但指出了处理迷宫的正确方法,这是我的最终目标。我喜欢他的回答问题的方法,首先告诉您每个步骤应该做什么,以便您对如何完成任务有一个清晰的想法,然后从头到尾提供完整的代码示例。很有帮助。
由于SOF的限制,我只能挑出一个答案。如果允许多个答案,我也会选择 Shamshirsaz.Navid 的答案。他的回答不仅指出了解决问题的正确方向,而且形象化的解释对我来说真的很管用~!我想它对所有试图理解为什么需要每一行代码的人都同样有效。他也在评论中跟进了我的问题,这使得 SOF 有点互动:)
Ann Zen 的回答中的 Threshold track bar 也是一个非常有用的提示,可以帮助人们快速找到最佳值。
这条线如何运作?
据我所知,cv2.waitKey(number)对于所有int数字的输出都是-1,并且0xff是一个等于255十进制数的十六进制数。
-1 & 0xff等于255十进制数。
此外,ord('q')等于113。
但是现在,我不知道为什么255 == 113?
谁能帮助我使用opencv Python将RGB色彩空间图像转换为YUV色彩空间图像和YCbCr色彩空间图像?
python opencv image-processing image-preprocessing opencv-python
我知道也许我需要提取交界点并从该点(?)划分 de 线,但我不知道如何做到这一点。
有没有办法用 Python Scikit Image 或 OpenCV 做到这一点?
我正在尝试从照片中找到迷宫的位置。
我想得到的是迷宫角落的 (x,y) 点。
正如你所看到的,我cv2.Canny()对图片进行了应用,并得到了一个非常漂亮干净的图像作为开始。
所以下一步就是定位迷宫。
我已经搜索了一段时间,所有 SOF 问题都要求找到“完美”矩形的位置,例如这个和这个 但在我的情况下,矩形没有闭合轮廓,因此它们的代码不起作用就我而言。
也看过 OpenCV 代码,他们都试图找到轮廓并将这些轮廓绘制到图像上,但它对我不起作用。我刚刚得到了 1 个大轮廓,它单独出现在我照片的边界上。
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
Run Code Online (Sandbox Code Playgroud)
更新 1
代码:
import cv2
from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
import imutils
img = cv2.imread('maze.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
edges = cv2.Canny(img,100,200)
f,axarr = plt.subplots(1,2,figsize=(15,15))
axarr[0].imshow(img)
axarr[1].imshow(edges)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我有1000张旧明信片,我想扫描,我认为使用某种自动裁剪/旋转工具优化我的工作流程可能是一个好主意,所以我开始用Python调查openCV.
你可以想象,我的目标是从这张图片中创建3张图片,每张图片包含一张明信片.我尝试了很多opencv选项,到目前为止我能够获得的最佳代码是:
import cv2, sys, imutils
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
image = cv2.imread("sample1600.jpg")
ratio = image.shape[0] / 300.0
image = imutils.resize(image, height = 800)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
ret, th = cv2.threshold(gray,220,235,1)
edged = cv2.Canny(th, 25, 200)
(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5]
for c in cnts:
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.05 * peri, True)
if len(approx) == 4:
cv2.drawContours(image, [approx], -1, (0, …Run Code Online (Sandbox Code Playgroud) python ×7
opencv ×6
python-3.x ×2
image ×1
maze ×1
numpy ×1
scanning ×1
scikit-image ×1
scikit-learn ×1
scipy ×1
yolo ×1