OpenCV 图像一维直方图 and Java类中大括号{}作用
2018-03-06 23:06
316 查看
package com.xiuye.opencv; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.opencv.core.Core; import org.opencv.core.Core.MinMaxLocResult; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.MatOfFloat; import org.opencv.core.MatOfInt; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.highgui.Highgui; import org.opencv.imgproc.Imgproc; import com.xiuye.imshow.IV; public class CalcHist { static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); log("load libary"); } {// new T()的时候调用,构造函数之前在{}中初始化 log("TEST"); } public static void main(String[] args) { Mat src = Highgui.imread("p1.jpg"); IV.imshow("原图", src); Imgproc.cvtColor(src, src, Imgproc.COLOR_RGB2GRAY); IV.imshow("灰度图", src); List<Mat> images = new ArrayList<>(); images.add(src); MatOfInt channels = new MatOfInt(0); log("channels := " + channels.dump()); MatOfInt histSize = new MatOfInt(256); log("histSize := " + histSize.dump()); MatOfFloat ranges = new MatOfFloat(0, 255); log("ranges := " + ranges.dump()); // hist仅相当于一个矩阵(数组) Mat hist = Mat.eye(src.rows(), src.cols(), CvType.CV_8UC1); Imgproc.calcHist(images, channels, new Mat(), hist, histSize, ranges); log("hist := " + hist.dump()); MinMaxLocResult r = Core.minMaxLoc(hist); double maxVal = r.maxVal; double minVal = r.minVal; log("maxValue := " + maxVal); log("minValue := " + minVal); int size = 256; int scale = 3;//直方图条形宽度 // Mat histImg = Mat.zeros(size, size * scale+10/*加大图像宽度*/, CvType.CV_8UC1); Mat histImg = new Mat(size, size * scale+10/*加大图像宽度*/, CvType.CV_8UC3/*,Scalar.all(255)*/); int hpt = (int) (0.9*size); // Random randomColor = new Random();//设置随机颜色 // log(hist.get(254, 0)[0]); for (int i = 0; i < hist.rows(); i++) { double binValue = hist.get(i, 0)[0]; //因为值太大了,需要缩小,否则图形显示有问题 int val = (int) (binValue/maxVal*hpt); Point p1 = new Point(i*scale,size); Point p2 = new Point((i+1)*scale-1/*下标不越界,-1*/,size - val); // Core.rectangle(histImg, p1, p2, // new Scalar(randomColor.nextInt(size), // randomColor.nextInt(size),randomColor.nextInt(size)), // Core.FILLED/*设置填充整个矩形*/); Core.rectangle(histImg, p1, p2, new Scalar(0xd6,0x9a,0x00),/*B,G,R*/ Core.FILLED/*设置填充整个矩形*/); } IV.imshow("直方图", histImg); IV.waitKey(0);// 必须写上,否则不显示,按"ESC"退出 } private static <T> void log(T t) { System.out.println(t); } }
load libary
channels := [0]
histSize := [256]
ranges := [0;
255]
hist := [0;
0;
0;
0;
0;
1;
0;
1;
2;
0;
3;
5;
12;
13;
29;
51;
68;
106;
209;
408;
693;
1315;
1814;
2085;
2510;
2932;
3949;
4820;
5660;
5093;
5424;
6302;
7306;
8105;
8078;
8120;
8919;
9726;
10316;
10830;
12325;
13118;
11989;
12328;
11836;
12010;
13279;
15107;
16048;
15832;
14433;
12521;
12097;
13423;
13007;
11357;
10572;
10056;
10865;
11776;
9102;
8007;
7272;
6976;
6791;
5989;
5517;
5426;
5013;
4500;
4562;
4418;
4425;
4071;
4162;
4337;
4718;
5027;
4394;
4579;
5024;
4922;
5336;
5031;
3993;
3715;
4927;
3729;
3113;
2816;
2656;
2640;
2519;
2531;
2514;
2517;
2437;
2504;
2622;
2854;
3116;
3209;
3258;
3168;
3561;
3370;
3308;
2764;
2496;
2509;
2705;
2562;
2651;
2377;
2549;
2546;
2367;
2455;
2503;
2709;
3120;
3499;
3581;
3628;
3478;
3258;
2713;
2584;
2170;
1913;
1638;
1635;
1755;
2071;
2065;
1952;
1944;
1985;
1988;
1913;
2043;
2058;
2014;
2064;
1900;
1834;
2043;
1851;
1925;
2027;
1994;
1912;
1939;
2012;
1824;
1849;
1947;
1926;
1960;
2012;
2110;
1962;
1880;
1627;
1559;
1468;
1383;
1217;
1177;
1182;
1139;
1068;
1026;
888;
906;
856;
825;
736;
788;
891;
848;
775;
611;
406;
354;
313;
307;
272;
237;
227;
243;
219;
212;
207;
216;
196;
198;
189;
179;
181;
187;
171;
181;
164;
175;
170;
161;
191;
132;
178;
140;
151;
166;
110;
131;
129;
125;
111;
121;
127;
113;
121;
139;
120;
122;
118;
106;
126;
111;
115;
134;
133;
133;
116;
98;
107;
83;
76;
73;
66;
56;
76;
75;
79;
89;
89;
79;
92;
110;
105;
96;
127;
121;
172;
182;
0]
maxValue := 16048.0
minValue := 0.0
参考地址:
imshow项目地址
OpenCV官网
相关文章推荐
- OpenCV 计算图像一维直方图
- [OPENCV learning] 获取图像的灰度和一维RGB彩色直方图
- 【第二部分 图像处理】第3章 Opencv图像处理进阶【3 直方图与匹配 E】
- OpenCV提取图像颜色直方图
- OpenCV2+入门系列(四):计算图像的直方图,平均灰度,灰度方差
- 基础学习笔记之opencv(19):有关图像序列的直方图计算
- OpenCV成长之路(4):图像直方图
- 【Python OpenCV】图像直方图 calcHist方法 equalizeHist方法
- 基于直方图的图像全局二值化算法原理、实现--一维最大熵
- OpenCV-007:图像直方图的显示
- 【OpenCV图像处理】十、图像的直方图及相关处理(上)
- 【第二部分 图像处理】第3章 Opencv图像处理进阶【3 直方图与匹配 A】
- OpenCV 2 学习笔记(21): 使用直方图比较检索相似图像
- opencv学习之(五)-直方图计算和绘制图像直方图
- OpenCV下设置灰度直方图的阈值来对图像进行查找(查表)变换的源码
- 图像识别中距离变换的原理及作用详解,并附用OpenCV中的distanceTransform实现距离变换的代码!
- 基于直方图的图像检索OpenCV实现
- opencv学习(三十七)之图像直方图计算calcHist()
- opencv 图像直方图绘制
- 图像相似度计算之直方图方法OpenCV实现