gpt4 book ai didi

java - OpenCV 3(Java 绑定(bind)): Apply CLAHE to image

转载 作者:行者123 更新时间:2023-12-01 10:29:41 24 4
gpt4 key购买 nike

我尝试使用 open cv 的 java 绑定(bind)对(彩色)png 图像应用非全局对比度(直方图)优化,但我无法让它工作。

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.File;

import javax.imageio.ImageIO;

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.CLAHE;
import org.opencv.imgproc.Imgproc;


public class Main {
public static void main( String[] args ) {

try {
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// fetch the png
File input = new File("test.png");
BufferedImage buffImage = ImageIO.read(input);
byte[] data = ((DataBufferByte) buffImage.getRaster().getDataBuffer()).getData();
// build MAT for original image
Mat orgImage = new Mat(buffImage.getHeight(),buffImage.getWidth(), CvType.CV_8UC3);
orgImage.put(0, 0, data);
// transform from to LAB
Mat labImage = new Mat(buffImage.getHeight(), buffImage.getWidth(), CvType.CV_8UC4);
Imgproc.cvtColor(orgImage, labImage, Imgproc.COLOR_BGR2Lab);


// apply CLAHE
CLAHE clahe = Imgproc.createCLAHE()
Mat destImage = new Mat(buffImage.getHeight(),buffImage.getWidth(), CvType.CV_8UC4);
clahe.apply(labImage, destImage);

Imgcodecs.imwrite("test_clahe.png", destImage);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}

我得到了异常(exception):

Error: cv::Exception: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\clahe.cpp:354: error: (-215) _src.type() == CV_8UC1 || _src.type() == CV_16UC1 in function `anonymous
-namespace'::CLAHE_Impl::apply

我想我需要与各个 channel 合作,但我不知道如何做。代码灵感来自this c++ example ,但不知怎的,我无法提取相应的层(我想我只需要 L channel 用于 clahe.apply())

最佳答案

This Example只需分割 Lab 图像并将 Clahe 应用于 L channel (强度 channel )。所以只需将此代码用于 java。

List<Mat> channels = new LinkedList();
Core.split(labImage, channels);
CLAHE clahe = Imgproc.createCLAHE()
Mat destImage = new Mat(buffImage.getHeight(),buffImage.getWidth(), CvType.CV_8UC4);
clahe.apply(channels.get(0), destImage);
Core.merge(channels, labImage);

最后将强度 channel 合并到其他 channel 。我没有更改任何参数,因为我不知道你的图像看起来如何,但我想这不是问题。希望对您有帮助!

关于java - OpenCV 3(Java 绑定(bind)): Apply CLAHE to image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35154686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com