我想在图像上应用cv2.pyrDown()时明确指定图像的输出大小。
def gaussian_pyramid(image, scale=1.5, minSize=(30, 30)):
yield image
while True:
w = int(image.shape[1] / scale)
h = int(image.shape[0] / scale)
image = cv2.pyrDown(image, dstsize=(w, h))
if image.shape[0] < minSize[1] or image.shape[1] < minSize[0]:
break
yield image
Run Code Online (Sandbox Code Playgroud)
但它抛出了一个类似于此的错误。
OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0 && std::abs(dsize.width*2 - ssize.width) <= 2 && std::abs(dsize.height*2 - ssize.height) <= 2) in pyrDown_, file /io/opencv/modules/imgproc/src/pyramids.cpp, line 873
Run Code Online (Sandbox Code Playgroud)
任何想法如何将图像的输出大小指定为方法参数。
我正在使用cv2.putText()将文本放在视频上。
这按预期工作,但我正在尝试使用不同的字体(在 OpenCV 中不可用)。
我知道 OpenCV 仅限于cv2.FONT_HERSHEY字体,所以我使用 PIL 和 OpenCV 来实现这一点。
我将这种方法用于图像,并且该实验成功了。但是当我在视频上尝试类似的东西时我失败了。
import cv2
from PIL import ImageFont, ImageDraw, Image
camera = cv2.VideoCapture('some_video.wmv')
while cv2.waitKey(30) < 0:
rv, frame = camera.read()
if rv:
font = ImageFont.truetype("calibrii.ttf", 80)
cv2.putText(frame, 'Hello World!', (600, 600), font, 2.8, 255)
cv2.imshow('Video', frame)
Run Code Online (Sandbox Code Playgroud)
我在同一目录中有“calibrii.ttf”,正如我所提到的,这种方法适用于图像。
这是错误:
cv2.putText(frame, 'Hello World!', (600, 600), font, 2.8, 255)
TypeError: an integer is required (got type FreeTypeFont)
Run Code Online (Sandbox Code Playgroud) 我想知道如何使用 OpenCV 在 Python 3 中编写一个函数,它接收图像和阈值,并在严重模糊并降低质量(越快越好)后返回“暗”或“亮”。这听起来可能含糊不清,但任何有效的方法都行。
我想从扫描的表格中提取信息并将其存储为 csv。现在我的表提取算法执行以下步骤。
该算法适用于数字原生 pdf 和大多数扫描文档。但是,某些文档有一个嘈杂的表格,因此无法正确识别行。
这是我的算法失败的示例图像。
这些是我在这张桌子上做的操作。1.高斯模糊
2.Otsu阈值
3.形态开口
4.Canny边缘检测
5.filtered lines,如您所见,这些线条显然没有正确识别。
任何人都可以提出更好的方法来从这种质量较差的扫描中提取水平线和垂直线。
提前致谢!!
python opencv image-processing hough-transform opencv-python
有谁知道使用 python 创建相机源的方法?例如,我有 2 个摄像头:
每当我使用任何需要摄像头的 Web 应用程序或界面时,我都可以从上述两个选项中选择一个摄像头源。
我想要实现的是,我正在使用我自己的相机门户在我的 python 程序中处理实时帧,如下所示:
import numpy as np
import cv2
while True:
_,frame = self.cam.read()
k = cv2.waitKey(1)
if k & 0xFF == ord('q'):
self.cam.release()
cv2.destroyAllWindows()
break
else:
cv2.imshow("Frame",frame)
Run Code Online (Sandbox Code Playgroud)
现在我想将其frame用作相机源,因此下次每当我打开需要相机的软件或网络应用程序时,它都会显示如下选项:
有没有人对如何去做有任何建议或提示?我见过一些高级软件,它们生成自己的相机源,但它们是用 C++ 编写的。我想知道这是否会发生在 python 中。
这是一个相同的例子:
如您所见,那里有多个摄像机源。我想添加一个相机源,它在其提要中显示由 python 处理的帧。
我有以下Python代码:
FONT = cv2.FONT_HERSHEY_SIMPLEX
FONT_SCALE = 1.0
FONT_THICKNESS = 2
bg_color = (255, 255, 255)
label_color = (0, 0, 0)
label = 'Propaganda'
label_width, label_height = cv2.getTextSize(label, FONT, FONT_SCALE, FONT_THICKNESS)[0]
label_patch = np.zeros((label_height, label_width, 3), np.uint8)
label_patch[:,:] = bg_color
Run Code Online (Sandbox Code Playgroud)
我创建了一个新的空白图片,其大小由返回getTextSize,然后根据docs在左下角添加文本,该文本x = 0, y = (height - 1)使用相同的字体,比例和粗细参数getTextSize
cv2.putText(label_patch, label, (0, label_height - 1), FONT, FONT_SCALE, label_color, FONT_THICKNESS)
Run Code Online (Sandbox Code Playgroud)
但是当我在图像上使用imshow或imwrite时label_patch,这是我得到的结果:
它可以很容易地看出,小写 p字母和小写g是切在中间,这样g并a不能甚至加以区分。如何使OpenCV getTextSize返回正确的大小,如何使OpenCV …
我有一个用例,我必须在搜索后找到实时视频每一帧的连续 rgb 像素颜色计数,我发现了一段代码,它做同样的事情,但性能方面需要大约 3 秒才能给我输出,但在在我的情况下,我必须尽快进行此计算,可能是 1 秒内 25 帧。有人可以通过重构以下代码来帮助我弄清楚如何做到这一点
from PIL import Image
import timeit
starttime = timeit.default_timer()
with Image.open("netflix.png") as image:
color_count = {}
width, height = image.size
print(width,height)
rgb_image = image.convert('RGB')
for x in range(width):
for y in range(height):
rgb = rgb_image.getpixel((x, y))
if rgb in color_count:
color_count[rgb] += 1
else:
color_count[rgb] = 1
print('Pixel Count per Unique Color:')
print('-' * 30)
print(len(color_count.items()))
print("The time difference is :", timeit.default_timer() - starttime)
Run Code Online (Sandbox Code Playgroud)
输出:
每个唯一颜色的像素数:130869
时差为:3.9660612
每当我绘制此图像时,都会出现白色变黄的问题。我知道这是由于matplotlib使用的默认颜色映射viridis所致。当我切换到cmap ='gray'时,它最终显示右侧的红色窗格。
谁能解释为什么会这样?此类图片通常应使用什么颜色图?当我执行默认的imshow(img)时,图片如何显示正确的颜色?隔离单个颜色窗格时会有什么变化?当隔离图像中的红色绿色或蓝色窗格时,首选的cmap是什么?为什么?
这是红色窗格的输出
常规图像根据RGB颜色模式正确绘制:
OpenCV-Python 版本 3.4.1
我正在尝试通过相机检测多个物体。对象是脸、眼睛、勺子、笔。Spoon 和 Pen 是特别的,即它应该只检测我用它训练过的 Pen 和 Spoon。但是它可以检测所有类型的面部和眼睛,因为我使用了 OpenCV-Python 附带的“.xml”文件进行面部和眼睛检测。
我的问题是关于代码。下面我的代码中有一行写着detectMultiScale(gray, 1.3, 10)。现在,我使用了文档,仍然无法清楚地理解括号的最后两个参数。
我的代码:
# with camera feed
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
spoon_cascade = cv2.CascadeClassifier('SpoonCascade.xml')
pen_cascade = cv2.CascadeClassifier('PenCascade.xml')
cap = cv2.VideoCapture('link')
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
spoons = spoon_cascade.detectMultiScale(gray, 1.3, 10)
pens = pen_cascade.detectMultiScale(gray, 1.3, 10)
for (x, y, w, h) in spoons:
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'Spoon', (x-w, y-h), …Run Code Online (Sandbox Code Playgroud) opencv object-detection cascade-classifier opencv3.0 opencv-python
opencv-python ×10
opencv ×7
python ×7
matplotlib ×1
numpy ×1
opencv-text ×1
opencv3.0 ×1
pillow ×1