如何在不先将文件另存为png或jpeg的情况下将numpy数组传递给openCV?

诺克斯

我正在尝试截屏,然后将其转换为numpy数组。然后,我想使用屏幕截图运行cv2.matchTemplate。到目前为止,我获得此效果的唯一方法是保存图像:cv2.imwrite('temp.png',imcv),然后在cv2.matchTemplate中使用该图像。这似乎是非常错误的。我如何正确转换numpy数组以避免保存并将其直接传递给cv2.matchTemplate函数?

我正在Ubuntu btw中执行此项目。

import pyscreenshot as ImageGrab
import PIL
import cv2
import numpy as np
from matplotlib import pyplot as plt

# part of the screen
im=ImageGrab.grab(bbox=(65,50,835,725)) # X1,Y1,X2,Y2

#convert to numpy array
im=im.convert('RGB')
imcv = np.array(im) 
imcv = imcv[:, :, ::-1].copy() 
cv2.imwrite('temp.png',imcv)

img = cv2.imread('temp.png',0)
template = cv2.imread('fight.png',0)
w, h = template.shape[::-1]

# Apply template Matching
res = cv2.matchTemplate(img,template,cv2.TM_CCOEFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
print(min_val)
print(max_val)
print(min_loc)
print(max_loc)
if(max_loc == (484,125)):
    print("True!")

top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)

cv2.rectangle(img,top_left, bottom_right, 255, 2)

plt.subplot(121),plt.imshow(res,cmap = 'gray')
plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img,cmap = 'gray')
plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
plt.suptitle(cv2.TM_CCOEFF)

plt.show()

这也是最简单的方法:我还将在代码后发布错误消息。

import pyscreenshot as ImageGrab
import PIL
import cv2
import numpy

im=ImageGrab.grab(bbox=(65,50,835,725)) # X1,Y1,X2,Y2
print type(im)
im=im.convert('RGB')
print type(im)
im = numpy.array(im)
print type(im)
im = im[:, :, ::-1].copy() 
print type(im)
cv2.cv.fromarray(im)
print type(im) 

template = cv2.imread('fight.png',0)

templateTest = cv2.matchTemplate(im,template,cv2.TM_CCOEFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
print(min_val)
print(max_val)
print(min_loc)
print(max_loc)

<type 'instance'>
<type 'instance'>
<type 'numpy.ndarray'>
<type 'numpy.ndarray'>
<type 'numpy.ndarray'>
OpenCV Error: Assertion failed ((img.depth() == CV_8U || img.depth() == CV_32F) && img.type() == templ.type()) in matchTemplate, file /home/kninja/Downloads/opencv-2.4.9/modules/imgproc/src/templmatch.cpp, line 249
Traceback (most recent call last):
  File "StartOVer.py", line 32, in <module>
    res = cv2.matchTemplate(im,template,cv2.TM_CCOEFF)
cv2.error: /home/kninja/Downloads/opencv-2.4.9/modules/imgproc/src/templmatch.cpp:249: error: (-215) (img.depth() == CV_8U || img.depth() == CV_32F) && img.type() == templ.type() in function matchTemplate
弗罗约
import pyscreenshot as ImageGrab
import PIL
import cv2
import numpy

im=ImageGrab.grab(bbox=(65,50,835,725)) # X1,Y1,X2,Y2
print type(im)
im=im.convert('RGB')
print type(im)
im = numpy.array(im)
print type(im) 

cv_img = im.astype(np.uint8)
cv_gray = cv2.cvtColor(cv_img, cv2.COLOR_RGB2GRAY)

template = cv2.imread("filename.png", cv2.IMREAD_GRAYSCALE)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不丢失长文本的情况下将Excel文件另存为CSV?

如何在不提示用户丢失数据的情况下将XLSM文件另存为XLSX文件?

如何在不先将位图保存到文件系统的情况下将内存中的位图保存到ZipArchive?

如何在没有任何嵌入字体的情况下将Word文档另存为PDF?

如何在C#中使用SaveFileDialog将字节数组另存为png文件在磁盘上?

将numpy数组另存为txt文件[入门]

如何在python中将列表另存为numpy数组?

如何将numpy数组另存为Tensorflow变量

将Numpy数组另存为图像

如何在Swift中将数组另存为json文件?

如何将3D Python / NumPy数组另存为文本文件?

如何在不将列表另存为文件的情况下循环循环列表(读取每一行直到最后)?

(Python 3)如何在不先保存的情况下将二进制文件作为文本传递

Windows另存为对话框:保存时默认情况下如何查看所有文件类型?

如何在不保存图像的情况下将Numpy数组图像转换为JPEG?

如何在不改变原始数组的情况下将数组传递给函数?

如何在不定义数组大小的情况下将数组传递给GO函数?

在没有Libtiff的情况下将图像另存为.tif [编辑]

将字节数组另存为jpeg

如何在不先备份的情况下缩小日志文件?

将16位numpy数组另存为16位PNG图像

使用自定义颜色将numpy数组另存为单通道png

如何在不使用 JSON 的情况下将 php 数组值传递给 javascript

如何在不进行处理的情况下使用DLLImport将数组传递给Fortran DLL?

如何将pygame场景另存为jpeg?

如何在python中将词云另存为.png?

将乌龟输出另存为jpeg

将位图另存为jpeg图像

如何将张量图像另存为PNG?