Hi Friends,
Do you want to draw a histogram for an image as below?
See the histogram for above image for RGB channels.
The code:
You can see the same code written using numpy functions on histogram here : Drawing histogram in OpenCV- Python.
Don't forget to send your comments, doubts etc.
With Regards,
Abid Rahman K.
Do you want to draw a histogram for an image as below?
See the histogram for above image for RGB channels.
The code:
import cv2
import numpy as np
img = cv2.imread('zzzyj.jpg')
h = np.zeros((300,256,3))
bins = np.arange(256).reshape(256,1)
color = [ (255,0,0),(0,255,0),(0,0,255) ]
for ch, col in enumerate(color):
hist_item = cv2.calcHist([img],[ch],None,[256],[0,256])
cv2.normalize(hist_item,hist_item,0,255,cv2.NORM_MINMAX)
hist=np.int32(np.around(hist_item))
pts = np.column_stack((bins,hist))
cv2.polylines(h,[pts],False,col)
h=np.flipud(h)
cv2.imshow('colorhist',h)
cv2.waitKey(0)
You can see the same code written using numpy functions on histogram here : Drawing histogram in OpenCV- Python.
Don't forget to send your comments, doubts etc.
With Regards,
Abid Rahman K.
20 Comments on OpenCV-Python: Drawing Histogram in OpenCV-Python
OpenCV Error: Assertion failed (depth >= 0 && depth <= CV_32F) in unknown function, file ..\..\..\OpenCV-2.4.0\modules\core\src\opengl_interop.cpp, line 755
Any idea what might cause that?
Thanks a lot,
Alex"
Can you tell which line of code shows this error ? If my assumption is true, error says array should be of depth 32F or something less than that. Check if your array is CV_64F?"
OpenCV Error: Assertion failed (src.dims <= 2 && esz <= (size_t)32) in transpose, file /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_opencv/opencv/work/OpenCV-2.4.1/modules/core/src/matrix.cpp, line 1871
terminate called throwing an exception
Do you know how to fix this error?"
I installed OpenCV 2.4.2 with their built in Python wrapper, but the function imread() doesn't exist. There is a LoadImageM() however."
This is new cv2 interface of OpenCV ( I use 2.4.1 version) along with Numpy Support, which is similar to Matlab."
I have the same problems as taketo eguchi on my Mac.
It seems that the cv2.polylines statement at the end of the for loop causes this problem.
I'm a newby on Python / OpenCVPython / Eclipse, and yesterday I tried your tutorial programs. Most of them work fine,
but the pointpolygontest also crashed at the same call.
A small exerpt of the crash report showed:
Process: Python [2821]
Path: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
Identifier: Python
Version: ??? (???)
Code Type: X86-64 (Native)
Parent Process: eclipse [9272]
Date/Time: 2012-07-15 18:40:13.111 +0200
OS Version: Mac OS X Server 10.7.4 (11E53)
Report Version: 9
...
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff89c7482a __kill + 10
1 libsystem_c.dylib 0x00007fff9110aa9c abort + 177
2 libc++abi.dylib 0x00007fff8b3df7bc abort_message + 214
3 libc++abi.dylib 0x00007fff8b3dcfdd default_terminate() + 42
4 libstdc++.6.dylib 0x00007fff967b787b std::terminate() + 21
5 cv2.so 0x00000001050cfea3 _ZL18pyopencv_polylinesP7_objectS0_S0_ + 1011
6 org.python.python 0x0000000104d3cfeb PyEval_EvalFrameEx + 18011
7 org.python.python 0x0000000104d402a7 PyEval_EvalCodeEx + 2103
8 org.python.python 0x0000000104d40326 PyEval_EvalCode + 54
9 org.python.python 0x0000000104d5eaf4 PyRun_FileExFlags + 164
10 org.python.python 0x0000000104d5fda8 PyRun_SimpleFileExFlags + 392
11 org.python.python 0x0000000104d7316a Py_Main + 2874
12 org.python.python 0x0000000104c94f14 0x104c94000 + 3860
...
Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/cv2.so
0x1051c9000 - 0x1053c6ff7 +libopencv_core.2.4.dylib (2.4.2 - compatibility 2.4.0) /opt/local/lib/libopencv_core.2.4.dylib
...
Model: MacBookPro8,3, BootROM MBP81.0047.B27, 4 processors, Intel Core i7, 2.3 GHz, 8 GB, SMC 1.70f5
Graphics: AMD Radeon HD 6750M, AMD Radeon HD 6750M, PCIe, 1024 MB
Graphics: Intel HD Graphics 3000, Intel HD Graphics 3000, Built-In, 512 MB
Memory Module: BANK 0/DIMM0, 4 GB, DDR3, 1333 MHz, 0x80CE, 0x4D34373142353237334448302D4348392020
Memory Module: BANK 1/DIMM0, 4 GB, DDR3, 1333 MHz, 0x80CE, 0x4D34373142353237334448302D4348392020
AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0xD6), Broadcom BCM43xx 1.0 (5.106.198.4.20)
Bluetooth: Version 4.0.5f11, 2 service, 18 devices, 1 incoming serial ports
Network Service: Ethernet, Ethernet, en0
Serial ATA Device: APPLE SSD TS512C, 500.28 GB
Serial ATA Device: MATSHITADVD-R UJ-8A8
Anyway, thanks for the great help in learning OpenCVPython..!!!"
pts = np.column_stack((bins,hist)).copy()
and run the code. Please let me know what happens !!"
Traceback (most recent call last):
File "C:/Users/Mike/Desktop/script/script", line 10, in
hist_item = cv2.calcHist([img],[ch],None,[256],[0,255])
error: ..\..\..\src\opencv\modules\imgproc\src\histogram.cpp:148: error: (-215) j < nimages
>>>
I am not sure but, where am i supposed to place the image? what would be the path? (i would of thought it should be in the same folder as the py script)."
me too have the same error when i ran this code in Fedora 64-bit. But no problem in Windows 32-bit. So I think problem may be with 32-64 bit editions. Not sure."
I got same error as the guy above:
OpenCV Error: Assertion failed (src.dims <= 2 && esz <= (size_t)32) in transpose, file /home/username/Desktop/OpenCV-2.3.1/modules/core/src/matrix.cpp, line 1680
terminate called after throwing an instance of 'cv::Exception'
what(): /home/username/Desktop/OpenCV-2.3.1/modules/core/src/matrix.cpp:1680: error: (-215) src.dims <= 2 && esz <= (size_t)32 in function transpose
the error seems to be in this line:
cv2.polylines(h,[pts],False,col)
"
I'm testing your example using the prompt from Windows XP. I typed the script, but when I run it, nothing happens! I get no erros, but I execute test.py and then the program ends, it's not showing that histogram window. Why is that?
Thanks!
Marco"
-bins = np.arange(256).reshape(256,1)
+bins = np.arange(256,dtype=np.int32).reshape(256,1)
"
i had same errors, i just add cv2.namedWindow('colorhist', cv.CV_WINDOW_AUTOSIZE) at the beginning and it works just fine.
Lana"
thanks for your code, I had some syntax trouble with getting the function to work, now everything works fine. In return I'd like to point out a bug in your code:
-hist_item = cv2.calcHist([img],[ch],None,[256],[0,255])
+hist_item = cv2.calcHist([img],[ch],None,[256],[0,256])
Otherwise, values == 255 won't get counted. You can check this easily by summing up the histogram and check, that the result is not equal to the amount of pixels of your image.
Regards, Matthäus"
I didn't notice it. "
cv2.namedWindow('colorhist', cv2.CV_WINDOW_AUTOSIZE)"