"Unsupported format or combination of formats () in cvCanny" using numpy arrays (Bug #930)
Description
$ python
Python 2.6.6rc1+ (r266rc1:83691, Aug 5 2010, 17:07:04)
[GCC 4.4.5 20100728 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import cv, numpy
cvmat = cv.fromarray(numpy.ones((10,10)))
cvmat2 = cv.fromarray(numpy.ones((10,10)))
cv.Canny(cvmat,cvmat2, 0,1)
OpenCV Error: Unsupported format or combination of formats () in cvCanny, file /tmp/buildd/opencv-2.1.0/src/cv/cvcanny.cpp, line 66
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cv.error
Associated revisions
Merge pull request #930 from pengx17:2.4_haar_ext
Merge remote-tracking branch 'origin/2.4'
Pull requests:
#943 from jet47:cuda-5.5-support
#944 from jet47:cmake-2.8.11-cuda-fix
#912 from SpecLad:contributing
#934 from SpecLad:parallel-for
#931 from jet47:gpu-test-fixes
#932 from bitwangyaoyao:2.4_fixBFM
#918 from bitwangyaoyao:2.4_samples
#924 from pengx17:2.4_arithm_fix
#925 from pengx17:2.4_canny_tmp_fix
#927 from bitwangyaoyao:2.4_perf
#930 from pengx17:2.4_haar_ext
#928 from apavlenko:bugfix_3027
#920 from asmorkalov:android_move
#910 from pengx17:2.4_oclgfft
#913 from janm399:2.4
#916 from bitwangyaoyao:2.4_fixPyrLK
#919 from abidrahmank:2.4
#923 from pengx17:2.4_macfix
Conflicts:
modules/calib3d/src/stereobm.cpp
modules/features2d/src/detectors.cpp
modules/gpu/src/error.cpp
modules/gpu/src/precomp.hpp
modules/imgproc/src/distransform.cpp
modules/imgproc/src/morph.cpp
modules/ocl/include/opencv2/ocl/ocl.hpp
modules/ocl/perf/perf_color.cpp
modules/ocl/perf/perf_imgproc.cpp
modules/ocl/perf/perf_match_template.cpp
modules/ocl/perf/precomp.cpp
modules/ocl/perf/precomp.hpp
modules/ocl/src/arithm.cpp
modules/ocl/src/canny.cpp
modules/ocl/src/filtering.cpp
modules/ocl/src/haar.cpp
modules/ocl/src/hog.cpp
modules/ocl/src/imgproc.cpp
modules/ocl/src/opencl/haarobjectdetect.cl
modules/ocl/src/pyrlk.cpp
modules/video/src/bgfg_gaussmix2.cpp
modules/video/src/lkpyramid.cpp
platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh
platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh
platforms/scripts/ABI_compat_generator.py
samples/ocl/facedetect.cpp
History
Updated by bayle shanks about 14 years ago
workaround:
import cv, numpy
def flatapply(fn, arg):
return numpy.reshape(fn(numpy.ravel(arg)), numpy.shape(arg))
def normalizeRange(x): # as opposed to normalizeStd
y = x - numpy.nanmin(numpy.ravel(x))
return y / (numpy.nanmax(numpy.ravel(y)))
def toUint8(x):
return flatapply(lambda x: numpy.round_(normalizeRange(x)*255).astype(numpy.uint8), x)
im = numpy.ones((10,10))
im = toUint8(im)
cvmat = cv.fromarray(im)
cvmat2 = cv.CreateMat(numpy.shape(im)r0,numpy.shape(im)r1,cv.CV_8UC1)
cv.Canny(cvmat,cvmat2, 0,1)
Updated by Vadim Pisarevsky over 13 years ago
this is not a problem of the bindings. By default, numpy.ones creates floating-point array, which cv.Canny does not support. It works only with 8-bit data. The workaround basically implements this cast to 8-bit unsigned type.
- Status changed from Open to Done
- (deleted custom field) set to wontfix