title: Apply openCV Look Up Table (LUT) to an image
body: <p>I want to apply a custom <em>color look up table</em> (<strong>LUT</strong>) on an image.</p>
  
  <p>I have looked over the <code>openCV</code> <a href="http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#lut" rel="nofollow noreferrer">LUT Api</a> but I can not seem to get it right.</p>
  
  <pre><code>#!/bin/bash
  # -*- coding: utf-8 -*-
  
  import os
  import numpy as np
  import cv2
  
  b_max = 230
  g_max = 220
  r_max = 250
  
  identity = np.arange(256, dtype = np.dtype('uint8'))
  
  b_channel = np.arange(b_max, dtype = np.dtype('uint8'))
  b_channel = np.append(b_channel, (256-b_max)*[b_max])
  g_channel = np.arange(g_max, dtype = np.dtype('uint8'))
  g_channel = np.append(g_channel, (256-g_max)*[g_max])
  r_channel = np.arange(r_max, dtype = np.dtype('uint8'))
  r_channel = np.append(r_channel, (256-r_max)*[r_max])
  
  if 256 != b_channel.size or 256 != g_channel.size or 256 != r_channel.size:
      print "size of arrays don't match!"
  
  lut = np.dstack((identity, identity, b_channel, g_channel, r_channel))
  
  # Load the image
  img = cv2.imread('input.jpg',cv2.IMREAD_COLOR)
  dstImage = cv2.LUT(img, lut)
  cv2.imwrite('output.jpg', dstImage)
  </code></pre>
  
  <p>I get the following error:</p>
  
  <pre><code>OpenCV Error: Assertion failed ((lutcn == cn || lutcn == 1) &amp;&amp; _lut.total() == 256 &amp;&amp; _lut.isContinuous() &amp;&amp; (depth == CV_8U || depth == CV_8S)) in cv::LUT, file C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\core\src\convert.cpp, line 5690
  Traceback (most recent call last):
    File "ApplyCLUT.py", line 33, in &lt;module&gt;
      dstImage = cv2.LUT(img, lut)
  cv2.error: C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\core\src\convert.cpp:5690: error: (-215) (lutcn == cn || lutcn == 1) &amp;&amp; _lut.total() == 256 &amp;&amp; _lut.isContinuous() &amp;&amp; (depth == CV_8U || depth == CV_8S) in function cv::LUT
  </code></pre>
  
  <p><strong>EDIT: 
  change to this line:</strong></p>
  
  <pre><code>lut = np.dstack( (b_channel, g_channel, r_channel) )
  </code></pre>
  
  <p>and it will work!</p>