title: How do you pass a numpy array to openCV without saving the file as a png or jpeg first?
body: <p>I am trying to take a screenshot, then convert it to a numpy array. I then want to run cv2.matchTemplate using the screenshot. So far the only way I have gotten this to work is to save the image: cv2.imwrite('temp.png',imcv) and then use that image in cv2.matchTemplate. This seems horribly wrong. How can I convert the numpy array properly to avoid saving and just pass it straight to the cv2.matchTemplate function? </p>
  
  <p>I am doing this project in Ubuntu btw.</p>
  
  <pre><code>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()
  </code></pre>
  
  <p>This is the simplest I can get it down too: I will also post error message after code. </p>
  
  <pre><code>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)
  
  &lt;type 'instance'&gt;
  &lt;type 'instance'&gt;
  &lt;type 'numpy.ndarray'&gt;
  &lt;type 'numpy.ndarray'&gt;
  &lt;type 'numpy.ndarray'&gt;
  OpenCV Error: Assertion failed ((img.depth() == CV_8U || img.depth() == CV_32F) &amp;&amp; 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 &lt;module&gt;
      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) &amp;&amp; img.type() == templ.type() in function matchTemplate
  </code></pre>