提示:个人学习探索过程,不一定完全正确,请理性看待。
前言
提示:接上文JavaCV 绘制多边形。上文我们绘制了带有颜色的多边形,这次我们需要根据上次的图形进行颜色反转,将上部分区域颜色进行变换。
提示:以下是本篇文章正文内容,下面案例可供参考
一、彩色图片和灰度图片
示例:先了解一下彩色图片和灰度图片
彩色图像和灰度图像的区别是:前者是彩色相片,后者是黑白相片。
彩色图像
是指图像中的每个像素值都分成R、G、B三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为真彩色。例如图像深度为24,用R:G:B=8:8:8来表示色彩,则R、G、B各占用8位来表示各自基色分量的强度,每个基色分量的强度等级为28=256种。图像可容纳224=16M种色彩(24位色)。24位色被称为真彩色,它可以达到人眼分辨的极限,发色数是1677万多色,也就是2的24次方。但32位色就并非是2的32次方的发色数,它其实也是1677万多色,不过它增加了256阶颜色的灰度,为了方便称呼,就规定它为32位色。少量显卡能达到36位色,它是24位发色数再加512阶颜色灰度。但其实自然界的色彩是不能用任何数字归纳的,这些只是相对于人眼的识别能力,这样得到的色彩可以相对人眼基本反映原图的真实色彩,故称真彩色。
灰度图像
灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。
简单总结
彩色图片有3通道,灰度图片只有一个通道。
二、彩色图片转灰度图片
彩色图片
代码如下(示例):
package com.example.demo;
import org.bytedeco.javacpp.BytePointer;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.bytedeco.javacv.Java2DFrameUtils;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.global.opencv_highgui;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.MatVector;
import org.bytedeco.opencv.opencv_core.Point;
import org.bytedeco.opencv.opencv_core.Scalar;
import org.opencv.imgproc.Imgproc;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Arrays;
public class DrawRect {
public static void main(String[] args){
int[][] inCabinetArea = {
{
0, 200}, {
250, 240}, {
260, 255}, {
1100, 285}, {
1180, 240}, {
1180, 620},{
0, 620}};
Mat mat = new Mat(720,1280,opencv_core.CV_8UC3);
Mat outMat = new Mat(720,1280,opencv_core.CV_8UC3);
Point hatPoints = new Point(7);
Scalar pointer = new Scalar();
pointer.red(0);
pointer.green(20);
pointer.blue(0);
for (int i = 0, inCabinetAreaLength = inCabinetArea.length; i < inCabinetAreaLength; i++) {
int[] ints = inCabinetArea[i];
Point pB = new Point(ints[0], ints[1]);
hatPoints.position(i).put(pB);
}
opencv_imgproc.fillConvexPoly(mat, hatPoints.position(0),7,pointer);
opencv_highgui.imshow("123",mat);
opencv_highgui.waitKey();
}
}
将此图片转为灰度图片
package com.example.demo;
import org.bytedeco.javacpp.BytePointer;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.bytedeco.javacv.Java2DFrameUtils;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.global.opencv_highgui;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.MatVector