parent
5f6ce6f4b0
commit
bc18fb481f
6 changed files with 411 additions and 139 deletions
@ -1,112 +0,0 @@ |
|||||||
/**
|
|
||||||
* file Smoothing.cpp |
|
||||||
* brief Sample code for simple filters |
|
||||||
* author OpenCV team |
|
||||||
*/ |
|
||||||
|
|
||||||
#include "opencv2/imgproc.hpp" |
|
||||||
#include "opencv2/imgcodecs.hpp" |
|
||||||
#include "opencv2/highgui.hpp" |
|
||||||
|
|
||||||
using namespace std; |
|
||||||
using namespace cv; |
|
||||||
|
|
||||||
/// Global Variables
|
|
||||||
int DELAY_CAPTION = 1500; |
|
||||||
int DELAY_BLUR = 100; |
|
||||||
int MAX_KERNEL_LENGTH = 31; |
|
||||||
|
|
||||||
Mat src; Mat dst; |
|
||||||
char window_name[] = "Smoothing Demo"; |
|
||||||
|
|
||||||
/// Function headers
|
|
||||||
int display_caption( const char* caption ); |
|
||||||
int display_dst( int delay ); |
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* function main |
|
||||||
*/ |
|
||||||
int main( void ) |
|
||||||
{ |
|
||||||
namedWindow( window_name, WINDOW_AUTOSIZE ); |
|
||||||
|
|
||||||
/// Load the source image
|
|
||||||
src = imread( "../data/lena.jpg", IMREAD_COLOR ); |
|
||||||
|
|
||||||
if( display_caption( "Original Image" ) != 0 ) { return 0; } |
|
||||||
|
|
||||||
dst = src.clone(); |
|
||||||
if( display_dst( DELAY_CAPTION ) != 0 ) { return 0; } |
|
||||||
|
|
||||||
|
|
||||||
/// Applying Homogeneous blur
|
|
||||||
if( display_caption( "Homogeneous Blur" ) != 0 ) { return 0; } |
|
||||||
|
|
||||||
//![blur]
|
|
||||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) |
|
||||||
{ blur( src, dst, Size( i, i ), Point(-1,-1) ); |
|
||||||
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } } |
|
||||||
//![blur]
|
|
||||||
|
|
||||||
/// Applying Gaussian blur
|
|
||||||
if( display_caption( "Gaussian Blur" ) != 0 ) { return 0; } |
|
||||||
|
|
||||||
//![gaussianblur]
|
|
||||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) |
|
||||||
{ GaussianBlur( src, dst, Size( i, i ), 0, 0 ); |
|
||||||
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } } |
|
||||||
//![gaussianblur]
|
|
||||||
|
|
||||||
/// Applying Median blur
|
|
||||||
if( display_caption( "Median Blur" ) != 0 ) { return 0; } |
|
||||||
|
|
||||||
//![medianblur]
|
|
||||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) |
|
||||||
{ medianBlur ( src, dst, i ); |
|
||||||
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } } |
|
||||||
//![medianblur]
|
|
||||||
|
|
||||||
/// Applying Bilateral Filter
|
|
||||||
if( display_caption( "Bilateral Blur" ) != 0 ) { return 0; } |
|
||||||
|
|
||||||
//![bilateralfilter]
|
|
||||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) |
|
||||||
{ bilateralFilter ( src, dst, i, i*2, i/2 ); |
|
||||||
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } } |
|
||||||
//![bilateralfilter]
|
|
||||||
|
|
||||||
/// Wait until user press a key
|
|
||||||
display_caption( "End: Press a key!" ); |
|
||||||
|
|
||||||
waitKey(0); |
|
||||||
|
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
/**
|
|
||||||
* @function display_caption |
|
||||||
*/ |
|
||||||
int display_caption( const char* caption ) |
|
||||||
{ |
|
||||||
dst = Mat::zeros( src.size(), src.type() ); |
|
||||||
putText( dst, caption, |
|
||||||
Point( src.cols/4, src.rows/2), |
|
||||||
FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) ); |
|
||||||
|
|
||||||
imshow( window_name, dst ); |
|
||||||
int c = waitKey( DELAY_CAPTION ); |
|
||||||
if( c >= 0 ) { return -1; } |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
/**
|
|
||||||
* @function display_dst |
|
||||||
*/ |
|
||||||
int display_dst( int delay ) |
|
||||||
{ |
|
||||||
imshow( window_name, dst ); |
|
||||||
int c = waitKey ( delay ); |
|
||||||
if( c >= 0 ) { return -1; } |
|
||||||
return 0; |
|
||||||
} |
|
@ -0,0 +1,115 @@ |
|||||||
|
/**
|
||||||
|
* file Smoothing.cpp |
||||||
|
* brief Sample code for simple filters |
||||||
|
* author OpenCV team |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <iostream> |
||||||
|
#include "opencv2/imgproc.hpp" |
||||||
|
#include "opencv2/imgcodecs.hpp" |
||||||
|
#include "opencv2/highgui.hpp" |
||||||
|
|
||||||
|
using namespace std; |
||||||
|
using namespace cv; |
||||||
|
|
||||||
|
/// Global Variables
|
||||||
|
int DELAY_CAPTION = 1500; |
||||||
|
int DELAY_BLUR = 100; |
||||||
|
int MAX_KERNEL_LENGTH = 31; |
||||||
|
|
||||||
|
Mat src; Mat dst; |
||||||
|
char window_name[] = "Smoothing Demo"; |
||||||
|
|
||||||
|
/// Function headers
|
||||||
|
int display_caption( const char* caption ); |
||||||
|
int display_dst( int delay ); |
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* function main |
||||||
|
*/ |
||||||
|
int main( int argc, char ** argv ) |
||||||
|
{ |
||||||
|
namedWindow( window_name, WINDOW_AUTOSIZE ); |
||||||
|
|
||||||
|
/// Load the source image
|
||||||
|
const char* filename = argc >=2 ? argv[1] : "../data/lena.jpg"; |
||||||
|
|
||||||
|
src = imread( filename, IMREAD_COLOR ); |
||||||
|
if(src.empty()){ |
||||||
|
printf(" Error opening image\n"); |
||||||
|
printf(" Usage: ./Smoothing [image_name -- default ../data/lena.jpg] \n"); |
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
if( display_caption( "Original Image" ) != 0 ) { return 0; } |
||||||
|
|
||||||
|
dst = src.clone(); |
||||||
|
if( display_dst( DELAY_CAPTION ) != 0 ) { return 0; } |
||||||
|
|
||||||
|
|
||||||
|
/// Applying Homogeneous blur
|
||||||
|
if( display_caption( "Homogeneous Blur" ) != 0 ) { return 0; } |
||||||
|
|
||||||
|
//![blur]
|
||||||
|
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) |
||||||
|
{ blur( src, dst, Size( i, i ), Point(-1,-1) ); |
||||||
|
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } } |
||||||
|
//![blur]
|
||||||
|
|
||||||
|
/// Applying Gaussian blur
|
||||||
|
if( display_caption( "Gaussian Blur" ) != 0 ) { return 0; } |
||||||
|
|
||||||
|
//![gaussianblur]
|
||||||
|
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) |
||||||
|
{ GaussianBlur( src, dst, Size( i, i ), 0, 0 ); |
||||||
|
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } } |
||||||
|
//![gaussianblur]
|
||||||
|
|
||||||
|
/// Applying Median blur
|
||||||
|
if( display_caption( "Median Blur" ) != 0 ) { return 0; } |
||||||
|
|
||||||
|
//![medianblur]
|
||||||
|
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) |
||||||
|
{ medianBlur ( src, dst, i ); |
||||||
|
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } } |
||||||
|
//![medianblur]
|
||||||
|
|
||||||
|
/// Applying Bilateral Filter
|
||||||
|
if( display_caption( "Bilateral Blur" ) != 0 ) { return 0; } |
||||||
|
|
||||||
|
//![bilateralfilter]
|
||||||
|
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) |
||||||
|
{ bilateralFilter ( src, dst, i, i*2, i/2 ); |
||||||
|
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } } |
||||||
|
//![bilateralfilter]
|
||||||
|
|
||||||
|
/// Done
|
||||||
|
display_caption( "Done!" ); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
/**
|
||||||
|
* @function display_caption |
||||||
|
*/ |
||||||
|
int display_caption( const char* caption ) |
||||||
|
{ |
||||||
|
dst = Mat::zeros( src.size(), src.type() ); |
||||||
|
putText( dst, caption, |
||||||
|
Point( src.cols/4, src.rows/2), |
||||||
|
FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) ); |
||||||
|
|
||||||
|
return display_dst(DELAY_CAPTION); |
||||||
|
} |
||||||
|
|
||||||
|
/**
|
||||||
|
* @function display_dst |
||||||
|
*/ |
||||||
|
int display_dst( int delay ) |
||||||
|
{ |
||||||
|
imshow( window_name, dst ); |
||||||
|
int c = waitKey ( delay ); |
||||||
|
if( c >= 0 ) { return -1; } |
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,101 @@ |
|||||||
|
import org.opencv.core.*; |
||||||
|
import org.opencv.highgui.HighGui; |
||||||
|
import org.opencv.imgcodecs.Imgcodecs; |
||||||
|
import org.opencv.imgproc.Imgproc; |
||||||
|
|
||||||
|
class SmoothingRun { |
||||||
|
|
||||||
|
/// Global Variables
|
||||||
|
int DELAY_CAPTION = 1500; |
||||||
|
int DELAY_BLUR = 100; |
||||||
|
int MAX_KERNEL_LENGTH = 31; |
||||||
|
|
||||||
|
Mat src = new Mat(), dst = new Mat(); |
||||||
|
String windowName = "Filter Demo 1"; |
||||||
|
|
||||||
|
public void run(String[] args) { |
||||||
|
|
||||||
|
String filename = ((args.length > 0) ? args[0] : "../data/lena.jpg"); |
||||||
|
|
||||||
|
src = Imgcodecs.imread(filename, Imgcodecs.IMREAD_COLOR); |
||||||
|
if( src.empty() ) { |
||||||
|
System.out.println("Error opening image"); |
||||||
|
System.out.println("Usage: ./Smoothing [image_name -- default ../data/lena.jpg] \n"); |
||||||
|
System.exit(-1); |
||||||
|
} |
||||||
|
|
||||||
|
if( displayCaption( "Original Image" ) != 0 ) { System.exit(0); } |
||||||
|
|
||||||
|
dst = src.clone(); |
||||||
|
if( displayDst( DELAY_CAPTION ) != 0 ) { System.exit(0); } |
||||||
|
|
||||||
|
/// Applying Homogeneous blur
|
||||||
|
if( displayCaption( "Homogeneous Blur" ) != 0 ) { System.exit(0); } |
||||||
|
|
||||||
|
//! [blur]
|
||||||
|
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) { |
||||||
|
Imgproc.blur(src, dst, new Size(i, i), new Point(-1, -1)); |
||||||
|
displayDst(DELAY_BLUR); |
||||||
|
} |
||||||
|
//! [blur]
|
||||||
|
|
||||||
|
/// Applying Gaussian blur
|
||||||
|
if( displayCaption( "Gaussian Blur" ) != 0 ) { System.exit(0); } |
||||||
|
|
||||||
|
//! [gaussianblur]
|
||||||
|
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) { |
||||||
|
Imgproc.GaussianBlur(src, dst, new Size(i, i), 0, 0); |
||||||
|
displayDst(DELAY_BLUR); |
||||||
|
} |
||||||
|
//! [gaussianblur]
|
||||||
|
|
||||||
|
/// Applying Median blur
|
||||||
|
if( displayCaption( "Median Blur" ) != 0 ) { System.exit(0); } |
||||||
|
|
||||||
|
//! [medianblur]
|
||||||
|
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) { |
||||||
|
Imgproc.medianBlur(src, dst, i); |
||||||
|
displayDst(DELAY_BLUR); |
||||||
|
} |
||||||
|
//! [medianblur]
|
||||||
|
|
||||||
|
/// Applying Bilateral Filter
|
||||||
|
if( displayCaption( "Bilateral Blur" ) != 0 ) { System.exit(0); } |
||||||
|
|
||||||
|
//![bilateralfilter]
|
||||||
|
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) { |
||||||
|
Imgproc.bilateralFilter(src, dst, i, i * 2, i / 2); |
||||||
|
displayDst(DELAY_BLUR); |
||||||
|
} |
||||||
|
//![bilateralfilter]
|
||||||
|
|
||||||
|
/// Done
|
||||||
|
displayCaption( "Done!" ); |
||||||
|
|
||||||
|
System.exit(0); |
||||||
|
} |
||||||
|
|
||||||
|
int displayCaption(String caption) { |
||||||
|
dst = Mat.zeros(src.size(), src.type()); |
||||||
|
Imgproc.putText(dst, caption, |
||||||
|
new Point(src.cols() / 4, src.rows() / 2), |
||||||
|
Core.FONT_HERSHEY_COMPLEX, 1, new Scalar(255, 255, 255)); |
||||||
|
|
||||||
|
return displayDst(DELAY_CAPTION); |
||||||
|
} |
||||||
|
|
||||||
|
int displayDst(int delay) { |
||||||
|
HighGui.imshow( windowName, dst ); |
||||||
|
int c = HighGui.waitKey( delay ); |
||||||
|
if (c >= 0) { return -1; } |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public class Smoothing { |
||||||
|
public static void main(String[] args) { |
||||||
|
// Load the native library.
|
||||||
|
System.loadLibrary(Core.NATIVE_LIBRARY_NAME); |
||||||
|
new SmoothingRun().run(args); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,107 @@ |
|||||||
|
import sys |
||||||
|
import cv2 |
||||||
|
import numpy as np |
||||||
|
|
||||||
|
# Global Variables |
||||||
|
|
||||||
|
DELAY_CAPTION = 1500 |
||||||
|
DELAY_BLUR = 100 |
||||||
|
MAX_KERNEL_LENGTH = 31 |
||||||
|
|
||||||
|
src = None |
||||||
|
dst = None |
||||||
|
window_name = 'Smoothing Demo' |
||||||
|
|
||||||
|
|
||||||
|
def main(argv): |
||||||
|
cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE) |
||||||
|
|
||||||
|
# Load the source image |
||||||
|
imageName = argv[0] if len(argv) > 0 else "../data/lena.jpg" |
||||||
|
|
||||||
|
global src |
||||||
|
src = cv2.imread(imageName, 1) |
||||||
|
if src is None: |
||||||
|
print ('Error opening image') |
||||||
|
print ('Usage: smoothing.py [image_name -- default ../data/lena.jpg] \n') |
||||||
|
return -1 |
||||||
|
|
||||||
|
if display_caption('Original Image') != 0: |
||||||
|
return 0 |
||||||
|
|
||||||
|
global dst |
||||||
|
dst = np.copy(src) |
||||||
|
if display_dst(DELAY_CAPTION) != 0: |
||||||
|
return 0 |
||||||
|
|
||||||
|
# Applying Homogeneous blur |
||||||
|
if display_caption('Homogeneous Blur') != 0: |
||||||
|
return 0 |
||||||
|
|
||||||
|
## [blur] |
||||||
|
for i in range(1, MAX_KERNEL_LENGTH, 2): |
||||||
|
dst = cv2.blur(src, (i, i)) |
||||||
|
if display_dst(DELAY_BLUR) != 0: |
||||||
|
return 0 |
||||||
|
## [blur] |
||||||
|
|
||||||
|
# Applying Gaussian blur |
||||||
|
if display_caption('Gaussian Blur') != 0: |
||||||
|
return 0 |
||||||
|
|
||||||
|
## [gaussianblur] |
||||||
|
for i in range(1, MAX_KERNEL_LENGTH, 2): |
||||||
|
dst = cv2.GaussianBlur(src, (i, i), 0) |
||||||
|
if display_dst(DELAY_BLUR) != 0: |
||||||
|
return 0 |
||||||
|
## [gaussianblur] |
||||||
|
|
||||||
|
# Applying Median blur |
||||||
|
if display_caption('Median Blur') != 0: |
||||||
|
return 0 |
||||||
|
|
||||||
|
## [medianblur] |
||||||
|
for i in range(1, MAX_KERNEL_LENGTH, 2): |
||||||
|
dst = cv2.medianBlur(src, i) |
||||||
|
if display_dst(DELAY_BLUR) != 0: |
||||||
|
return 0 |
||||||
|
## [medianblur] |
||||||
|
|
||||||
|
# Applying Bilateral Filter |
||||||
|
if display_caption('Bilateral Blur') != 0: |
||||||
|
return 0 |
||||||
|
|
||||||
|
## [bilateralfilter] |
||||||
|
# Remember, bilateral is a bit slow, so as value go higher, it takes long time |
||||||
|
for i in range(1, MAX_KERNEL_LENGTH, 2): |
||||||
|
dst = cv2.bilateralFilter(src, i, i * 2, i / 2) |
||||||
|
if display_dst(DELAY_BLUR) != 0: |
||||||
|
return 0 |
||||||
|
## [bilateralfilter] |
||||||
|
|
||||||
|
# Done |
||||||
|
display_caption('Done!') |
||||||
|
|
||||||
|
return 0 |
||||||
|
|
||||||
|
|
||||||
|
def display_caption(caption): |
||||||
|
global dst |
||||||
|
dst = np.zeros(src.shape, src.dtype) |
||||||
|
rows, cols, ch = src.shape |
||||||
|
cv2.putText(dst, caption, |
||||||
|
(int(cols / 4), int(rows / 2)), |
||||||
|
cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255)) |
||||||
|
|
||||||
|
return display_dst(DELAY_CAPTION) |
||||||
|
|
||||||
|
|
||||||
|
def display_dst(delay): |
||||||
|
cv2.imshow(window_name, dst) |
||||||
|
c = cv2.waitKey(delay) |
||||||
|
if c >= 0 : return -1 |
||||||
|
return 0 |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
main(sys.argv[1:]) |
Loading…
Reference in new issue