parent
a6f5e1f0ca
commit
9ff33dacfc
5 changed files with 373 additions and 83 deletions
@ -0,0 +1,94 @@ |
|||||||
|
/** |
||||||
|
* @file CopyMakeBorder.java |
||||||
|
* @brief Sample code that shows the functionality of copyMakeBorder |
||||||
|
*/ |
||||||
|
|
||||||
|
import org.opencv.core.*; |
||||||
|
import org.opencv.highgui.HighGui; |
||||||
|
import org.opencv.imgcodecs.Imgcodecs; |
||||||
|
|
||||||
|
import java.util.Random; |
||||||
|
|
||||||
|
class CopyMakeBorderRun { |
||||||
|
|
||||||
|
public void run(String[] args) { |
||||||
|
|
||||||
|
//! [variables]
|
||||||
|
// Declare the variables
|
||||||
|
Mat src, dst = new Mat(); |
||||||
|
int top, bottom, left, right; |
||||||
|
int borderType = Core.BORDER_CONSTANT; |
||||||
|
String window_name = "copyMakeBorder Demo"; |
||||||
|
Random rng; |
||||||
|
//! [variables]
|
||||||
|
|
||||||
|
//! [load]
|
||||||
|
String imageName = ((args.length > 0) ? args[0] : "../data/lena.jpg"); |
||||||
|
|
||||||
|
// Load an image
|
||||||
|
src = Imgcodecs.imread(imageName, Imgcodecs.IMREAD_COLOR); |
||||||
|
|
||||||
|
// Check if image is loaded fine
|
||||||
|
if( src.empty() ) { |
||||||
|
System.out.println("Error opening image!"); |
||||||
|
System.out.println("Program Arguments: [image_name -- default ../data/lena.jpg] \n"); |
||||||
|
System.exit(-1); |
||||||
|
} |
||||||
|
//! [load]
|
||||||
|
|
||||||
|
// Brief how-to for this program
|
||||||
|
System.out.println("\n" + |
||||||
|
"\t copyMakeBorder Demo: \n" + |
||||||
|
"\t -------------------- \n" + |
||||||
|
" ** Press 'c' to set the border to a random constant value \n" + |
||||||
|
" ** Press 'r' to set the border to be replicated \n" + |
||||||
|
" ** Press 'ESC' to exit the program \n"); |
||||||
|
|
||||||
|
//![create_window]
|
||||||
|
HighGui.namedWindow( window_name, HighGui.WINDOW_AUTOSIZE ); |
||||||
|
//![create_window]
|
||||||
|
|
||||||
|
//! [init_arguments]
|
||||||
|
// Initialize arguments for the filter
|
||||||
|
top = (int) (0.05*src.rows()); bottom = top; |
||||||
|
left = (int) (0.05*src.cols()); right = left; |
||||||
|
//! [init_arguments]
|
||||||
|
|
||||||
|
while( true ) { |
||||||
|
//! [update_value]
|
||||||
|
rng = new Random(); |
||||||
|
Scalar value = new Scalar( rng.nextInt(256), |
||||||
|
rng.nextInt(256), rng.nextInt(256) ); |
||||||
|
//! [update_value]
|
||||||
|
|
||||||
|
//! [copymakeborder]
|
||||||
|
Core.copyMakeBorder( src, dst, top, bottom, left, right, borderType, value); |
||||||
|
//! [copymakeborder]
|
||||||
|
//! [display]
|
||||||
|
HighGui.imshow( window_name, dst ); |
||||||
|
//! [display]
|
||||||
|
|
||||||
|
//![check_keypress]
|
||||||
|
char c = (char) HighGui.waitKey(500); |
||||||
|
c = Character.toLowerCase(c); |
||||||
|
|
||||||
|
if( c == 27 ) |
||||||
|
{ break; } |
||||||
|
else if( c == 'c' ) |
||||||
|
{ borderType = Core.BORDER_CONSTANT;} |
||||||
|
else if( c == 'r' ) |
||||||
|
{ borderType = Core.BORDER_REPLICATE;} |
||||||
|
//![check_keypress]
|
||||||
|
} |
||||||
|
|
||||||
|
System.exit(0); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public class CopyMakeBorder { |
||||||
|
public static void main(String[] args) { |
||||||
|
// Load the native library.
|
||||||
|
System.loadLibrary(Core.NATIVE_LIBRARY_NAME); |
||||||
|
new CopyMakeBorderRun().run(args); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,69 @@ |
|||||||
|
""" |
||||||
|
@file copy_make_border.py |
||||||
|
@brief Sample code that shows the functionality of copyMakeBorder |
||||||
|
""" |
||||||
|
import sys |
||||||
|
from random import randint |
||||||
|
import cv2 |
||||||
|
|
||||||
|
|
||||||
|
def main(argv): |
||||||
|
## [variables] |
||||||
|
# First we declare the variables we are going to use |
||||||
|
borderType = cv2.BORDER_CONSTANT |
||||||
|
window_name = "copyMakeBorder Demo" |
||||||
|
## [variables] |
||||||
|
## [load] |
||||||
|
imageName = argv[0] if len(argv) > 0 else "../data/lena.jpg" |
||||||
|
|
||||||
|
# Loads an image |
||||||
|
src = cv2.imread(imageName, cv2.IMREAD_COLOR) |
||||||
|
|
||||||
|
# Check if image is loaded fine |
||||||
|
if src is None: |
||||||
|
print ('Error opening image!') |
||||||
|
print ('Usage: copy_make_border.py [image_name -- default ../data/lena.jpg] \n') |
||||||
|
return -1 |
||||||
|
## [load] |
||||||
|
# Brief how-to for this program |
||||||
|
print ('\n' |
||||||
|
'\t copyMakeBorder Demo: \n' |
||||||
|
' -------------------- \n' |
||||||
|
' ** Press \'c\' to set the border to a random constant value \n' |
||||||
|
' ** Press \'r\' to set the border to be replicated \n' |
||||||
|
' ** Press \'ESC\' to exit the program ') |
||||||
|
## [create_window] |
||||||
|
cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE) |
||||||
|
## [create_window] |
||||||
|
## [init_arguments] |
||||||
|
# Initialize arguments for the filter |
||||||
|
top = int(0.05 * src.shape[0]) # shape[0] = rows |
||||||
|
bottom = top |
||||||
|
left = int(0.05 * src.shape[1]) # shape[1] = cols |
||||||
|
right = left |
||||||
|
## [init_arguments] |
||||||
|
while 1: |
||||||
|
## [update_value] |
||||||
|
value = [randint(0, 255), randint(0, 255), randint(0, 255)] |
||||||
|
## [update_value] |
||||||
|
## [copymakeborder] |
||||||
|
dst = cv2.copyMakeBorder(src, top, bottom, left, right, borderType, None, value) |
||||||
|
## [copymakeborder] |
||||||
|
## [display] |
||||||
|
cv2.imshow(window_name, dst) |
||||||
|
## [display] |
||||||
|
## [check_keypress] |
||||||
|
c = cv2.waitKey(500) |
||||||
|
|
||||||
|
if c == 27: |
||||||
|
break |
||||||
|
elif c == 99: # 99 = ord('c') |
||||||
|
borderType = cv2.BORDER_CONSTANT |
||||||
|
elif c == 114: # 114 = ord('r') |
||||||
|
borderType = cv2.BORDER_REPLICATE |
||||||
|
## [check_keypress] |
||||||
|
return 0 |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
main(sys.argv[1:]) |
Loading…
Reference in new issue