mirror of
https://gitcode.com/gh_mirrors/es/esp32-opencv.git
synced 2025-08-16 11:55:00 +08:00
initial commit
This commit is contained in:
@ -0,0 +1,51 @@
|
||||
import org.opencv.core.*;
|
||||
import org.opencv.highgui.HighGui;
|
||||
import org.opencv.imgcodecs.Imgcodecs;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Scanner;
|
||||
|
||||
class AddingImagesRun{
|
||||
public void run() {
|
||||
double alpha = 0.5; double beta; double input;
|
||||
|
||||
Mat src1, src2, dst = new Mat();
|
||||
|
||||
System.out.println(" Simple Linear Blender ");
|
||||
System.out.println("-----------------------");
|
||||
System.out.println("* Enter alpha [0.0-1.0]: ");
|
||||
Scanner scan = new Scanner( System.in ).useLocale(Locale.US);
|
||||
input = scan.nextDouble();
|
||||
|
||||
if( input >= 0.0 && input <= 1.0 )
|
||||
alpha = input;
|
||||
|
||||
//! [load]
|
||||
src1 = Imgcodecs.imread("../../images/LinuxLogo.jpg");
|
||||
src2 = Imgcodecs.imread("../../images/WindowsLogo.jpg");
|
||||
//! [load]
|
||||
|
||||
if( src1.empty() == true ){ System.out.println("Error loading src1"); return;}
|
||||
if( src2.empty() == true ){ System.out.println("Error loading src2"); return;}
|
||||
|
||||
//! [blend_images]
|
||||
beta = ( 1.0 - alpha );
|
||||
Core.addWeighted( src1, alpha, src2, beta, 0.0, dst);
|
||||
//! [blend_images]
|
||||
|
||||
//![display]
|
||||
HighGui.imshow("Linear Blend", dst);
|
||||
HighGui.waitKey(0);
|
||||
//![display]
|
||||
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
public class AddingImages {
|
||||
public static void main(String[] args) {
|
||||
// Load the native library.
|
||||
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
|
||||
new AddingImagesRun().run();
|
||||
}
|
||||
}
|
@ -0,0 +1,109 @@
|
||||
import org.opencv.core.*;
|
||||
import org.opencv.highgui.HighGui;
|
||||
import org.opencv.imgcodecs.Imgcodecs;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
class DiscreteFourierTransformRun{
|
||||
private void help() {
|
||||
System.out.println("" +
|
||||
"This program demonstrated the use of the discrete Fourier transform (DFT). \n" +
|
||||
"The dft of an image is taken and it's power spectrum is displayed.\n" +
|
||||
"Usage:\n" +
|
||||
"./DiscreteFourierTransform [image_name -- default ../data/lena.jpg]");
|
||||
}
|
||||
|
||||
public void run(String[] args){
|
||||
|
||||
help();
|
||||
|
||||
String filename = ((args.length > 0) ? args[0] : "../data/lena.jpg");
|
||||
|
||||
Mat I = Imgcodecs.imread(filename, Imgcodecs.IMREAD_GRAYSCALE);
|
||||
if( I.empty() ) {
|
||||
System.out.println("Error opening image");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
//! [expand]
|
||||
Mat padded = new Mat(); //expand input image to optimal size
|
||||
int m = Core.getOptimalDFTSize( I.rows() );
|
||||
int n = Core.getOptimalDFTSize( I.cols() ); // on the border add zero values
|
||||
Core.copyMakeBorder(I, padded, 0, m - I.rows(), 0, n - I.cols(), Core.BORDER_CONSTANT, Scalar.all(0));
|
||||
//! [expand]
|
||||
|
||||
//! [complex_and_real]
|
||||
List<Mat> planes = new ArrayList<Mat>();
|
||||
padded.convertTo(padded, CvType.CV_32F);
|
||||
planes.add(padded);
|
||||
planes.add(Mat.zeros(padded.size(), CvType.CV_32F));
|
||||
Mat complexI = new Mat();
|
||||
Core.merge(planes, complexI); // Add to the expanded another plane with zeros
|
||||
//! [complex_and_real]
|
||||
|
||||
//! [dft]
|
||||
Core.dft(complexI, complexI); // this way the result may fit in the source matrix
|
||||
//! [dft]
|
||||
|
||||
// compute the magnitude and switch to logarithmic scale
|
||||
// => log(1 + sqrt(Re(DFT(I))^2 + Im(DFT(I))^2))
|
||||
//! [magnitude]
|
||||
Core.split(complexI, planes); // planes.get(0) = Re(DFT(I)
|
||||
// planes.get(1) = Im(DFT(I))
|
||||
Core.magnitude(planes.get(0), planes.get(1), planes.get(0));// planes.get(0) = magnitude
|
||||
Mat magI = planes.get(0);
|
||||
//! [magnitude]
|
||||
|
||||
//! [log]
|
||||
Mat matOfOnes = Mat.ones(magI.size(), magI.type());
|
||||
Core.add(matOfOnes, magI, magI); // switch to logarithmic scale
|
||||
Core.log(magI, magI);
|
||||
//! [log]
|
||||
|
||||
//! [crop_rearrange]
|
||||
// crop the spectrum, if it has an odd number of rows or columns
|
||||
magI = magI.submat(new Rect(0, 0, magI.cols() & -2, magI.rows() & -2));
|
||||
|
||||
// rearrange the quadrants of Fourier image so that the origin is at the image center
|
||||
int cx = magI.cols()/2;
|
||||
int cy = magI.rows()/2;
|
||||
|
||||
Mat q0 = new Mat(magI, new Rect(0, 0, cx, cy)); // Top-Left - Create a ROI per quadrant
|
||||
Mat q1 = new Mat(magI, new Rect(cx, 0, cx, cy)); // Top-Right
|
||||
Mat q2 = new Mat(magI, new Rect(0, cy, cx, cy)); // Bottom-Left
|
||||
Mat q3 = new Mat(magI, new Rect(cx, cy, cx, cy)); // Bottom-Right
|
||||
|
||||
Mat tmp = new Mat(); // swap quadrants (Top-Left with Bottom-Right)
|
||||
q0.copyTo(tmp);
|
||||
q3.copyTo(q0);
|
||||
tmp.copyTo(q3);
|
||||
|
||||
q1.copyTo(tmp); // swap quadrant (Top-Right with Bottom-Left)
|
||||
q2.copyTo(q1);
|
||||
tmp.copyTo(q2);
|
||||
//! [crop_rearrange]
|
||||
|
||||
magI.convertTo(magI, CvType.CV_8UC1);
|
||||
//! [normalize]
|
||||
Core.normalize(magI, magI, 0, 255, Core.NORM_MINMAX, CvType.CV_8UC1); // Transform the matrix with float values
|
||||
// into a viewable image form (float between
|
||||
// values 0 and 255).
|
||||
//! [normalize]
|
||||
|
||||
HighGui.imshow("Input Image" , I ); // Show the result
|
||||
HighGui.imshow("Spectrum Magnitude", magI);
|
||||
HighGui.waitKey();
|
||||
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class DiscreteFourierTransform {
|
||||
public static void main(String[] args) {
|
||||
// Load the native library.
|
||||
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
|
||||
new DiscreteFourierTransformRun().run(args);
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
import org.opencv.core.Core;
|
||||
import org.opencv.core.CvType;
|
||||
import org.opencv.core.Mat;
|
||||
import org.opencv.core.Scalar;
|
||||
import org.opencv.highgui.HighGui;
|
||||
import org.opencv.imgcodecs.Imgcodecs;
|
||||
import org.opencv.imgproc.Imgproc;
|
||||
|
||||
class MatMaskOperationsRun {
|
||||
|
||||
public void run(String[] args) {
|
||||
|
||||
String filename = "../data/lena.jpg";
|
||||
|
||||
int img_codec = Imgcodecs.IMREAD_COLOR;
|
||||
if (args.length != 0) {
|
||||
filename = args[0];
|
||||
if (args.length >= 2 && args[1].equals("G"))
|
||||
img_codec = Imgcodecs.IMREAD_GRAYSCALE;
|
||||
}
|
||||
|
||||
Mat src = Imgcodecs.imread(filename, img_codec);
|
||||
|
||||
if (src.empty()) {
|
||||
System.out.println("Can't open image [" + filename + "]");
|
||||
System.out.println("Program Arguments: [image_path -- default ../data/lena.jpg] [G -- grayscale]");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
HighGui.namedWindow("Input", HighGui.WINDOW_AUTOSIZE);
|
||||
HighGui.namedWindow("Output", HighGui.WINDOW_AUTOSIZE);
|
||||
|
||||
HighGui.imshow( "Input", src );
|
||||
double t = System.currentTimeMillis();
|
||||
|
||||
Mat dst0 = sharpen(src, new Mat());
|
||||
|
||||
t = ((double) System.currentTimeMillis() - t) / 1000;
|
||||
System.out.println("Hand written function time passed in seconds: " + t);
|
||||
|
||||
HighGui.imshow( "Output", dst0 );
|
||||
HighGui.moveWindow("Output", 400, 400);
|
||||
HighGui.waitKey();
|
||||
|
||||
//![kern]
|
||||
Mat kern = new Mat(3, 3, CvType.CV_8S);
|
||||
int row = 0, col = 0;
|
||||
kern.put(row, col, 0, -1, 0, -1, 5, -1, 0, -1, 0);
|
||||
//![kern]
|
||||
|
||||
t = System.currentTimeMillis();
|
||||
|
||||
Mat dst1 = new Mat();
|
||||
//![filter2D]
|
||||
Imgproc.filter2D(src, dst1, src.depth(), kern);
|
||||
//![filter2D]
|
||||
t = ((double) System.currentTimeMillis() - t) / 1000;
|
||||
System.out.println("Built-in filter2D time passed in seconds: " + t);
|
||||
|
||||
HighGui.imshow( "Output", dst1 );
|
||||
|
||||
HighGui.waitKey();
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
//! [basic_method]
|
||||
public static double saturate(double x) {
|
||||
return x > 255.0 ? 255.0 : (x < 0.0 ? 0.0 : x);
|
||||
}
|
||||
|
||||
public Mat sharpen(Mat myImage, Mat Result) {
|
||||
//! [8_bit]
|
||||
myImage.convertTo(myImage, CvType.CV_8U);
|
||||
//! [8_bit]
|
||||
|
||||
//! [create_channels]
|
||||
int nChannels = myImage.channels();
|
||||
Result.create(myImage.size(), myImage.type());
|
||||
//! [create_channels]
|
||||
|
||||
//! [basic_method_loop]
|
||||
for (int j = 1; j < myImage.rows() - 1; ++j) {
|
||||
for (int i = 1; i < myImage.cols() - 1; ++i) {
|
||||
double sum[] = new double[nChannels];
|
||||
|
||||
for (int k = 0; k < nChannels; ++k) {
|
||||
|
||||
double top = -myImage.get(j - 1, i)[k];
|
||||
double bottom = -myImage.get(j + 1, i)[k];
|
||||
double center = (5 * myImage.get(j, i)[k]);
|
||||
double left = -myImage.get(j, i - 1)[k];
|
||||
double right = -myImage.get(j, i + 1)[k];
|
||||
|
||||
sum[k] = saturate(top + bottom + center + left + right);
|
||||
}
|
||||
|
||||
Result.put(j, i, sum);
|
||||
}
|
||||
}
|
||||
//! [basic_method_loop]
|
||||
|
||||
//! [borders]
|
||||
Result.row(0).setTo(new Scalar(0));
|
||||
Result.row(Result.rows() - 1).setTo(new Scalar(0));
|
||||
Result.col(0).setTo(new Scalar(0));
|
||||
Result.col(Result.cols() - 1).setTo(new Scalar(0));
|
||||
//! [borders]
|
||||
|
||||
return Result;
|
||||
}
|
||||
//! [basic_method]
|
||||
}
|
||||
|
||||
public class MatMaskOperations {
|
||||
public static void main(String[] args) {
|
||||
// Load the native library.
|
||||
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
|
||||
new MatMaskOperationsRun().run(args);
|
||||
}
|
||||
}
|
@ -0,0 +1,130 @@
|
||||
import java.util.Arrays;
|
||||
|
||||
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.Rect;
|
||||
import org.opencv.highgui.HighGui;
|
||||
import org.opencv.imgcodecs.Imgcodecs;
|
||||
import org.opencv.imgproc.Imgproc;
|
||||
|
||||
public class MatOperations {
|
||||
@SuppressWarnings("unused")
|
||||
public static void main(String[] args) {
|
||||
/* Snippet code for Operations with images tutorial (not intended to be run) */
|
||||
|
||||
// Load the native OpenCV library
|
||||
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
|
||||
|
||||
String filename = "";
|
||||
// Input/Output
|
||||
{
|
||||
//! [Load an image from a file]
|
||||
Mat img = Imgcodecs.imread(filename);
|
||||
//! [Load an image from a file]
|
||||
}
|
||||
{
|
||||
//! [Load an image from a file in grayscale]
|
||||
Mat img = Imgcodecs.imread(filename, Imgcodecs.IMREAD_GRAYSCALE);
|
||||
//! [Load an image from a file in grayscale]
|
||||
}
|
||||
{
|
||||
Mat img = new Mat(4, 4, CvType.CV_8U);
|
||||
//! [Save image]
|
||||
Imgcodecs.imwrite(filename, img);
|
||||
//! [Save image]
|
||||
}
|
||||
// Accessing pixel intensity values
|
||||
{
|
||||
Mat img = new Mat(4, 4, CvType.CV_8U);
|
||||
int y = 0, x = 0;
|
||||
{
|
||||
//! [Pixel access 1]
|
||||
byte[] imgData = new byte[(int) (img.total() * img.channels())];
|
||||
img.get(0, 0, imgData);
|
||||
byte intensity = imgData[y * img.cols() + x];
|
||||
//! [Pixel access 1]
|
||||
}
|
||||
{
|
||||
//! [Pixel access 5]
|
||||
byte[] imgData = new byte[(int) (img.total() * img.channels())];
|
||||
imgData[y * img.cols() + x] = (byte) 128;
|
||||
img.put(0, 0, imgData);
|
||||
//! [Pixel access 5]
|
||||
}
|
||||
|
||||
}
|
||||
// Memory management and reference counting
|
||||
{
|
||||
//! [Reference counting 2]
|
||||
Mat img = Imgcodecs.imread("image.jpg");
|
||||
Mat img1 = img.clone();
|
||||
//! [Reference counting 2]
|
||||
}
|
||||
{
|
||||
//! [Reference counting 3]
|
||||
Mat img = Imgcodecs.imread("image.jpg");
|
||||
Mat sobelx = new Mat();
|
||||
Imgproc.Sobel(img, sobelx, CvType.CV_32F, 1, 0);
|
||||
//! [Reference counting 3]
|
||||
}
|
||||
// Primitive operations
|
||||
{
|
||||
Mat img = new Mat(400, 400, CvType.CV_8UC3);
|
||||
{
|
||||
//! [Set image to black]
|
||||
byte[] imgData = new byte[(int) (img.total() * img.channels())];
|
||||
Arrays.fill(imgData, (byte) 0);
|
||||
img.put(0, 0, imgData);
|
||||
//! [Set image to black]
|
||||
}
|
||||
{
|
||||
//! [Select ROI]
|
||||
Rect r = new Rect(10, 10, 100, 100);
|
||||
Mat smallImg = img.submat(r);
|
||||
//! [Select ROI]
|
||||
}
|
||||
}
|
||||
{
|
||||
//! [BGR to Gray]
|
||||
Mat img = Imgcodecs.imread("image.jpg"); // loading a 8UC3 image
|
||||
Mat grey = new Mat();
|
||||
Imgproc.cvtColor(img, grey, Imgproc.COLOR_BGR2GRAY);
|
||||
//! [BGR to Gray]
|
||||
}
|
||||
{
|
||||
Mat dst = new Mat(), src = new Mat();
|
||||
//! [Convert to CV_32F]
|
||||
src.convertTo(dst, CvType.CV_32F);
|
||||
//! [Convert to CV_32F]
|
||||
}
|
||||
// Visualizing images
|
||||
{
|
||||
//! [imshow 1]
|
||||
Mat img = Imgcodecs.imread("image.jpg");
|
||||
HighGui.namedWindow("image", HighGui.WINDOW_AUTOSIZE);
|
||||
HighGui.imshow("image", img);
|
||||
HighGui.waitKey();
|
||||
//! [imshow 1]
|
||||
}
|
||||
{
|
||||
//! [imshow 2]
|
||||
Mat img = Imgcodecs.imread("image.jpg");
|
||||
Mat grey = new Mat();
|
||||
Imgproc.cvtColor(img, grey, Imgproc.COLOR_BGR2GRAY);
|
||||
Mat sobelx = new Mat();
|
||||
Imgproc.Sobel(grey, sobelx, CvType.CV_32F, 1, 0);
|
||||
MinMaxLocResult res = Core.minMaxLoc(sobelx); // find minimum and maximum intensities
|
||||
Mat draw = new Mat();
|
||||
double maxVal = res.maxVal, minVal = res.minVal;
|
||||
sobelx.convertTo(draw, CvType.CV_8U, 255.0 / (maxVal - minVal), -minVal * 255.0 / (maxVal - minVal));
|
||||
HighGui.namedWindow("image", HighGui.WINDOW_AUTOSIZE);
|
||||
HighGui.imshow("image", draw);
|
||||
HighGui.waitKey();
|
||||
//! [imshow 2]
|
||||
}
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user