206 lines
11 KiB
Python
206 lines
11 KiB
Python
|
from ij import IJ # pylint: disable=import-error
|
||
|
from ijopencv.ij import ImagePlusMatConverter # pylint: disable=import-error
|
||
|
from ijopencv.opencv import MatImagePlusConverter # pylint: disable=import-error
|
||
|
import org.bytedeco.javacpp.opencv_core as opencv_core # pylint: disable=import-error
|
||
|
import org.bytedeco.javacpp.opencv_imgproc as opencv_imgproc # pylint: disable=import-error
|
||
|
from org.bytedeco.javacpp.opencv_imgcodecs import imread, imwrite # pylint: disable=import-error
|
||
|
# from org.bytedeco.javacpp.opencv_core import CvMat
|
||
|
|
||
|
|
||
|
def test_opencv_calc_hist1():
|
||
|
src_image = opencv_core.Mat([128, 128])
|
||
|
histogram = opencv_imgproc.cvCalcHist(src_image) # pylint: disable=unused-variable
|
||
|
# TypeError: cvCalcHist(): expected 2 or 4 args; got 1
|
||
|
|
||
|
|
||
|
def test_opencv_calc_hist2():
|
||
|
src_image = opencv_core.Mat([128, 128])
|
||
|
histogram = opencv_core.Mat()
|
||
|
opencv_imgproc.cvCalcHist(src_image, histogram)
|
||
|
# TypeError: cvCalcHist(): 1st arg can't be coerced to org.bytedeco.javacpp.opencv_core$IplImage
|
||
|
|
||
|
|
||
|
def test_opencv_calc_hist3():
|
||
|
src_image = opencv_core.Mat([128, 128])
|
||
|
histogram = opencv_imgproc.calcHist(src_image) # pylint: disable=unused-variable
|
||
|
# TypeError: calcHist(): expected 6-8 or 10 args; got 1
|
||
|
# ah: ./opencv/src/main/java/org/bytedeco/javacpp/opencv_imgproc.java seems to contain the list of 57 allowed calcHist sets of arguments, as the number of arguments match
|
||
|
# [OK]graffy@pr079234:~/toto/javacpp-presets[19:45:41]>grep -A 5 calcHist ./opencv/src/main/java/org/bytedeco/javacpp/opencv_imgproc.java | sed -E 's/^[ ]*//g' | tr '\n' '`' | sed 's/,`/, /g' | tr '`' '\n' | grep '^@Namespace' | wc -l
|
||
|
# 57
|
||
|
# [OK]graffy@pr079234:~/toto/javacpp-presets[19:45:56]>grep -A 5 calcHist ./opencv/src/main/java/org/bytedeco/javacpp/opencv_imgproc.java | sed -E 's/^[ ]*//g' | tr '\n' '`' | sed 's/,`/, /g' | tr '`' '\n' | grep '^@Namespace' | head -2
|
||
|
# @Namespace("cv") public static native void calcHist( @Const Mat images, int nimages, @Const IntPointer channels, @ByVal Mat mask, @ByVal Mat hist, int dims, @Const IntPointer histSize, @Cast("const float**") PointerPointer ranges, @Cast("bool") boolean uniform/*=true*/, @Cast("bool") boolean accumulate/*=false*/ );
|
||
|
# @Namespace("cv") public static native void calcHist( @Const Mat images, int nimages, @Const IntPointer channels, @ByVal Mat mask, @ByVal Mat hist, int dims, @Const IntPointer histSize, @Const @ByPtrPtr FloatPointer ranges );
|
||
|
|
||
|
# [OK]graffy@pr079234:~/toto/javacpp-presets[19:38:39]>grep -A 5 calcHist ./opencv/src/main/java/org/bytedeco/javacpp/opencv_imgproc.java | sed -E 's/^[ ]*//g' | tr '\n' '`' | sed 's/,`/, /g' | tr '`' '\n' | grep '^@Namespace' | awk '-F,' '{print NF}' | sort --unique -n
|
||
|
# 6
|
||
|
# 7
|
||
|
# 8
|
||
|
# 10
|
||
|
|
||
|
|
||
|
def test_opencv_calc_hist4():
|
||
|
src_image = opencv_core.Mat([128, 128])
|
||
|
src_images = opencv_core.MatVector()
|
||
|
# print(dir(src_images))
|
||
|
src_images.push_back(src_image)
|
||
|
print(type(src_images))
|
||
|
# <type 'org.bytedeco.javacpp.opencv_core$MatVector'>
|
||
|
print(src_images)
|
||
|
# [org.bytedeco.javacpp.opencv_core$Mat[width=1024,height=1024,depth=8,channels=3]]
|
||
|
opencv_imgproc.calcHist(src_images, [0], None, None, [256], [0.0, 256.0])
|
||
|
# TypeError: calcHist(): 1st arg can't be coerced to org.bytedeco.javacpp.opencv_core$UMatVector, org.bytedeco.javacpp.opencv_core$GpuMatVector, org.bytedeco.javacpp.opencv_core$MatVector
|
||
|
|
||
|
|
||
|
def test_opencv_calc_hist5():
|
||
|
src_image = opencv_core.Mat([128, 128])
|
||
|
histogram = opencv_core.Mat()
|
||
|
# @Namespace("cv") public static native void calcHist( @Const Mat images, int nimages, @Const int[] channels, @ByVal Mat mask, @ByVal Mat hist, int dims, @Const int[] histSize, @Const @ByPtrPtr float[] ranges );
|
||
|
opencv_imgproc.calcHist(src_image, 1, [0], None, histogram, 1, [256], [0.0, 256.0])
|
||
|
# at org.bytedeco.javacpp.opencv_imgproc.calcHist(Native Method)
|
||
|
# at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||
|
# at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
|
||
|
# at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||
|
# at java.lang.reflect.Method.invoke(Method.java:497)
|
||
|
# java.lang.NullPointerException: java.lang.NullPointerException: Pointer address of argument 3 is NULL.
|
||
|
|
||
|
|
||
|
def test_opencv_calc_hist6():
|
||
|
src_image = opencv_core.Mat([128, 128])
|
||
|
histogram = opencv_core.Mat()
|
||
|
mask = opencv_core.Mat()
|
||
|
# @Namespace("cv") public static native void calcHist( @Const Mat images, int nimages, @Const int[] channels, @ByVal Mat mask, @ByVal Mat hist, int dims, @Const int[] histSize, @Const @ByPtrPtr float[] ranges );
|
||
|
opencv_imgproc.calcHist(src_image, 1, [0], mask, histogram, 1, [256], [0.0, 256.0])
|
||
|
# java.lang.RuntimeException: java.lang.RuntimeException: OpenCV(3.4.2) /Users/travis/build/bytedeco/javacpp-presets/opencv/cppbuild/macosx-x86_64/opencv-3.4.2/modules/imgproc/src/histogram.cpp:918: error: (-210:Unsupported format or combination of formats) in function 'calcHist'
|
||
|
|
||
|
|
||
|
def test_opencv_calc_hist7():
|
||
|
# 0 : depth=8
|
||
|
# 1 : depth=-2147483640
|
||
|
# 2 : depth=16
|
||
|
# 3 : depth=-2147483640
|
||
|
# 4 : depth=-2147483640
|
||
|
# 8 : depth=8, channels=2
|
||
|
print('opencv_core.CV_8U', opencv_core.CV_8U)
|
||
|
print('opencv_core.CV_16U', opencv_core.CV_16U)
|
||
|
print('opencv_core.CV_32F', opencv_core.CV_32F)
|
||
|
print('opencv_core.CV_8UC3', opencv_core.CV_8UC3)
|
||
|
src_image = opencv_core.Mat().zeros(128, 128, opencv_core.CV_8U).asMat()
|
||
|
byte_pointer = src_image.data()
|
||
|
print('byte_pointer', byte_pointer)
|
||
|
# byte_pointer.putChar(128 * 3 + 7, 5)
|
||
|
byte_pointer.put(128 * 3 + 7, 5)
|
||
|
# print(dir(opencv_core))
|
||
|
|
||
|
print('src_image', src_image)
|
||
|
histogram = opencv_core.Mat()
|
||
|
print('histogram', histogram)
|
||
|
|
||
|
# create an empty mask. From https://docs.opencv.org/3.4.1/d6/dc7/group__imgproc__hist.html#ga4b2b5fd75503ff9e6844cc4dcdaed35d :
|
||
|
# Optional mask. If the matrix is not empty, it must be an 8-bit array of the same size as images[i] . The non-zero mask elements mark the array elements counted in the histogram.
|
||
|
empty_mask = opencv_core.Mat()
|
||
|
print('empty_mask', empty_mask)
|
||
|
|
||
|
# @Namespace("cv") public static native void calcHist( @Const Mat images, int nimages, @Const int[] channels, @ByVal Mat mask, @ByVal Mat hist, int dims, @Const int[] histSize, @Const @ByPtrPtr float[] ranges );
|
||
|
opencv_imgproc.calcHist(src_image, 1, [0], empty_mask, histogram, 1, [256], [0.0, 256.0])
|
||
|
print('histogram', histogram, opencv_core.CvMat(histogram))
|
||
|
|
||
|
|
||
|
def test_opencv_calc_hist():
|
||
|
'''
|
||
|
'''
|
||
|
# https://forum.image.sc/t/use-opencv-within-jython-macro/10320/4
|
||
|
|
||
|
test_opencv_calc_hist7()
|
||
|
|
||
|
# histogram = opencv_imgproc.calcHist(images=[src_image], channels=[0], mask=None, histSize=[256], ranges=[0, 256])
|
||
|
# histogram = opencv_imgproc.calcHist(src_image, 0, None, 3, [256], [0.0, 256.0], True, False)
|
||
|
# print(dir(opencv_imgproc))
|
||
|
# help(opencv_imgproc.cvCalcHist)
|
||
|
# opencv_imgproc.calcHist(src_image, None, histogram)
|
||
|
# histogram = opencv_imgproc.cvCalcHist(src_image, None, [256], [0.0, 256.0])
|
||
|
# import inspect
|
||
|
# lines = inspect.getsource(opencv_imgproc.calcHist)
|
||
|
# opencv_imgproc.calcHist(src_image, histogram)
|
||
|
|
||
|
# there are 2 calcHist functions in /Applications/Fiji.app/jars/opencv-3.4.2-1.4.2.jar, and they take 6 or 7 arguments :
|
||
|
# jar -xvf /Applications/Fiji.app/jars/opencv-3.4.2-1.4.2.jar
|
||
|
# [1]graffy@pr079234:~/toto/jython[15:18:17]>javap ./org/opencv/imgproc/Imgproc.class | grep calcHist
|
||
|
# public static void calcHist(java.util.List<org.opencv.core.Mat>, org.opencv.core.MatOfInt, org.opencv.core.Mat, org.opencv.core.Mat, org.opencv.core.MatOfInt, org.opencv.core.MatOfFloat, boolean);
|
||
|
# public static void calcHist(java.util.List<org.opencv.core.Mat>, org.opencv.core.MatOfInt, org.opencv.core.Mat, org.opencv.core.Mat, org.opencv.core.MatOfInt, org.opencv.core.MatOfFloat);
|
||
|
|
||
|
#
|
||
|
# jar -xvf /Applications/Fiji.app/jars/opencv-3.4.2-1.4.2-macosx-x86_64.jar
|
||
|
# [OK]graffy@pr079234:~/toto/jython[19:02:28]>grep -A 5 "calcHist(" org/bytedeco/javacpp/macosx-x86_64/include/opencv2/imgproc.hpp
|
||
|
# CV_EXPORTS void calcHist( const Mat* images, int nimages,
|
||
|
# const int* channels, InputArray mask,
|
||
|
# OutputArray hist, int dims, const int* histSize,
|
||
|
# const float** ranges, bool uniform = true, bool accumulate = false );
|
||
|
|
||
|
# /** @overload
|
||
|
# --
|
||
|
# CV_EXPORTS void calcHist( const Mat* images, int nimages,
|
||
|
# const int* channels, InputArray mask,
|
||
|
# SparseMat& hist, int dims,
|
||
|
# const int* histSize, const float** ranges,
|
||
|
# bool uniform = true, bool accumulate = false );
|
||
|
|
||
|
# --
|
||
|
# CV_EXPORTS_W void calcHist( InputArrayOfArrays images,
|
||
|
# const std::vector<int>& channels,
|
||
|
# InputArray mask, OutputArray hist,
|
||
|
# const std::vector<int>& histSize,
|
||
|
# const std::vector<float>& ranges,
|
||
|
# bool accumulate = false );
|
||
|
|
||
|
# git checkout tags/1.4.2
|
||
|
# [OK]graffy@pr079234:~/toto/javacpp-presets[19:21:57]>git branch
|
||
|
# * (HEAD detached at 1.4.2)
|
||
|
# [OK]graffy@pr079234:~/toto/javacpp-presets[19:18:33]>grep -A 2 "void cvCalcHist" ./opencv/src/main/java/org/bytedeco/javacpp/opencv_imgproc.java
|
||
|
# public static native void cvCalcHist( @Cast("IplImage**") PointerPointer image, CvHistogram hist,
|
||
|
# int accumulate/*=0*/,
|
||
|
# @Const CvArr mask/*=NULL*/ );
|
||
|
# --
|
||
|
# public static native void cvCalcHist( @ByPtrPtr IplImage image, CvHistogram hist );
|
||
|
# public static native void cvCalcHist( @ByPtrPtr IplImage image, CvHistogram hist,
|
||
|
# int accumulate/*=0*/,
|
||
|
# @Const CvArr mask/*=NULL*/ );
|
||
|
|
||
|
# [OK]graffy@pr079234:~/toto/javacpp-presets[19:18:41]>grep -A 2 "void cvCalcHist" ./opencv/src/main/java/org/bytedeco/javacpp/helper/opencv_imgproc.java
|
||
|
# public static void cvCalcHist(IplImage[] arr, CvHistogram hist, int accumulate/*=0*/, CvArr mask/*=null*/) {
|
||
|
# org.bytedeco.javacpp.opencv_imgproc.cvCalcHist(new IplImageArray(arr), hist, accumulate, mask);
|
||
|
# }
|
||
|
# --
|
||
|
# public static void cvCalcHist(IplImageArray arr, CvHistogram hist,
|
||
|
# int accumulate/*=0*/, CvArr mask/*=null*/) {
|
||
|
# org.bytedeco.javacpp.opencv_imgproc.cvCalcArrHist(arr, hist, accumulate, mask);
|
||
|
|
||
|
|
||
|
def create_test_image_file(image_file_path):
|
||
|
image = opencv_core.Mat().zeros(128, 128, opencv_core.CV_8U).asMat()
|
||
|
imwrite(image_file_path, image)
|
||
|
|
||
|
|
||
|
def test_ijopencv_converter():
|
||
|
image_file_path = '/tmp/toto.png'
|
||
|
create_test_image_file(image_file_path)
|
||
|
image = IJ.openImage(image_file_path)
|
||
|
imp2mat = ImagePlusMatConverter()
|
||
|
mat = imp2mat.toMat(image.getProcessor())
|
||
|
# white_mat = imread(white_image_file_path)
|
||
|
print('mat', mat)
|
||
|
|
||
|
|
||
|
def test_opencv():
|
||
|
|
||
|
test_ijopencv_converter()
|
||
|
|
||
|
test_opencv_calc_hist()
|
||
|
|
||
|
|
||
|
# If a Jython script is run, the variable __name__ contains the string '__main__'.
|
||
|
# If a script is loaded as module, __name__ has a different value.
|
||
|
if __name__ in ['__builtin__', '__main__']:
|
||
|
# run_script()
|
||
|
# test_get_image_median_value()
|
||
|
test_opencv()
|