JavaCV处理BGR通道

本文探讨了JavaCV中彩色图片和灰度图片的区别,并提供了将彩色图片转换为灰度图片的方法。通过代码示例展示了如何获取像素点的RGB通道值和灰度值,以及如何进行颜色反转操作。内容适用于JavaCV,不完全适用于OpenCV。
摘要由CSDN通过智能技术生成

提示:个人学习探索过程,不一定完全正确,请理性看待。


前言

提示:接上文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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值