opencv 图像处理 ------ 高亮图片处理


import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;

/**
 * 高亮图片处理
 *
 */
public class Hightlight_remove {

	static void highlightRemove(Mat src, Mat dst) {

		for (int i = 0; i < src.rows(); i++) {

			for (int j = 0; j < src.cols(); j++) {
				double B = src.get(i, j)[0];
				double G = src.get(i, j)[1];
				double R = src.get(i, j)[2];

				double alpha_r = R / (R + G + B);
				double alpha_g = G / (R + G + B);
				double alpha_b = B / (R + G + B);

				double alpha = Math.max(Math.max(alpha_r, alpha_g), alpha_b);
				double MaxC = Math.max(Math.max(R, G), B);
				double minalpha = Math.min(Math.min(alpha_r, alpha_g), alpha_b);
				double beta_r = 1 - (alpha - alpha_r) / (3 * alpha - 1);
				double beta_g = 1 - (alpha - alpha_g) / (3 * alpha - 1);
				double beta_b = 1 - (alpha - alpha_b) / (3 * alpha - 1);
				double beta = Math.max(Math.max(beta_r, beta_g), beta_b);
				double gama_r = (alpha_r - minalpha) / (1 - 3 * minalpha);
				double gama_g = (alpha_g - minalpha) / (1 - 3 * minalpha);
				double gama_b = (alpha_b - minalpha) / (1 - 3 * minalpha);
				double gama = Math.max(Math.max(gama_r, gama_g), gama_b);

				double temp = (gama * (R + G + B) - MaxC) / (3 * gama - 1);

				double[] data = new double[3];
				data[0] = B - (temp + 0.5);
				data[1] = G - (temp + 0.5);
				data[2] = R - (temp + 0.5);
				dst.put(i, j, data);
			}
		}
	}

	public static void main(String[] args) {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
		Mat src = Imgcodecs.imread("D:\\c\\snooker\\1.png");
		Mat dst = new Mat(src.size(), src.type());
		highlightRemove(src, dst);
		Imgcodecs.imwrite("D:\\c\\snooker\\chuli.png", dst);
		HighGui.imshow("", dst);
		HighGui.waitKey();
		HighGui.destroyAllWindows();
		System.exit(0);
	}

}

效果图:

opencv 图像处理 ------ 高亮图片处理_第1张图片opencv 图像处理 ------ 高亮图片处理_第2张图片

参考:http://blog.sina.com.cn/s/blog_6388b0f8010137hy.html

你可能感兴趣的:(opencv,图像处理)