Posts

Showing posts from 2019

[Android] Playing Guitar App

Image

[Java] Sort Algorithm using Java for GUI

Image

[Android, Mysql, PHP] Detect my location using Android

Image
Android  GpsInfo - > insert_location.php Database Structure (Mysql) PHP map.php

[Java/Android] Control personal computer using my voice by Android

Image

[Java/Android] Control Raspberry Pi using Android Smart Phone

Image

[Java] Word Book using MySQL

Image

[Java] Creating a Pokemon Book using Java

Image

[Java] HeartRain Game

Image

[Java] Animation effect using Pure Java

Image

[OpenCV] Chapter02-11 Computing gradient images using Sobel filter

Image
Computing gradient images using Sobel filter Source Code package main import ( "gocv.io/x/gocv" "image" "log" ) func main() { imageFilePath := "../../data/Lena.png" originalMat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if originalMat.Empty() { log.Panic("Can not read image: " + imageFilePath) return } gaussianBlurMat := gocv.NewMat() gocv.GaussianBlur(originalMat, &gaussianBlurMat, image.Point{X: 3, Y: 3}, 0, 0, gocv.BorderDefault) grayMat := gocv.NewMat() gocv.CvtColor(gaussianBlurMat, &grayMat, gocv.ColorBGRToGray) windowForGray := gocv.NewWindow("Gray Image") defer windowForGray.Close() windowForGray.IMShow(grayMat) // dx dx := gocv.NewMat() gocv.Sobel(grayMat, &dx, gocv.MatTypeCV16S, 1, 0, 5, 1, 0, gocv.BorderDefault) gocv.ConvertScaleAbs(dx, &dx, 1, 0) windowForDx := gocv.NewWindow("dx Image") defer windowForDx.Close() windowForDx.IMShow(dx) // dy d...

[OpenCV] Chapter02-10 Removing noise using Gaussian, median, bilateral filters

Image
Removing noise using Gaussian, median, bilateral filters Source Code package main import ( "gocv.io/x/gocv" "image" "log" "math/rand" ) type Image []float32 func main() { imageFilePath := "../../data/Lena.png" originalMat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if originalMat.Empty() { log.Panic("Can not read image: " + imageFilePath) return } originalImage := originalMat.ToBytes() originalFloat32Image := convertToFloat32(originalImage) // noised noisedImage := createNoisedImage(originalFloat32Image) noisedMat, err := gocv.NewMatFromBytes(originalMat.Rows(), originalMat.Cols(), gocv.MatTypeCV8UC3, noisedImage) if err != nil { log.Panic("Can not convert bytes to Mat") return } windowForNoisedImage := gocv.NewWindow("Noised Image") defer windowForNoisedImage.Close() windowForNoisedImage.IMShow(noisedMat) // gaussian gaussianBlurMat := gocv.NewMat() gocv.Gaus...

[OpenCV] Chapter02-09 Equalizing image histogram

Image
Equalizing image histogram Source Code package main import ( "fmt" "gocv.io/x/gocv" "gonum.org/v1/plot" "gonum.org/v1/plot/plotter" "gonum.org/v1/plot/vg" "log" ) func main() { imageFilePath := "../../data/Lena.png" originalMat := gocv.IMRead(imageFilePath, gocv.IMReadGrayScale) if originalMat.Empty() { log.Panic("Can not read image: " + imageFilePath) return } // grey equalizeHist greyEqualizeHistMat := gocv.NewMat() gocv.EqualizeHist(originalMat, &greyEqualizeHistMat) windowForGreyEqualizeHist := gocv.NewWindow("Window For Grey EqualizeHist") defer windowForGreyEqualizeHist.Close() windowForGreyEqualizeHist.IMShow(greyEqualizeHistMat) // plot greyEqualizeHistImage := greyEqualizeHistMat.ToBytes() v := make(plotter.Values, len(greyEqualizeHistImage)) for i := 0; i < len(v); i++ { v[i] = float64(greyEqualizeHistImage[i]) } plot, err := plot.New() if e...

[OpenCV] Chapter02-08 Computing image histogram

Image
Computing image histogram Source Code package main import ( "fmt" "gocv.io/x/gocv" "gonum.org/v1/plot" "gonum.org/v1/plot/plotter" "gonum.org/v1/plot/vg" "log" ) func main() { imageFilePath := "../../data/Lena.png" originalMat := gocv.IMRead(imageFilePath, gocv.IMReadGrayScale) if originalMat.Empty() { log.Panic("Can not read image: " + imageFilePath) return } windowForGrey := gocv.NewWindow("Original grey") defer windowForGrey.Close() windowForGrey.IMShow(originalMat) originalImage := originalMat.ToBytes() v := make(plotter.Values, len(originalImage)) for i := 0; i < len(v); i++ { v[i] = float64(originalImage[i]) } plot, err := plot.New() if err != nil { log.Println("Can not create plot", err) return } plot.Title.Text = fmt.Sprintf("Histogram of a %s", "Grey Image") histogram, err := plotter.NewHist(v, len(v)) if err !=...

[OpenCV] Chapter02-07 Mean variance image normalization

Mean variance image normalization Source Code package main import ( "gocv.io/x/gocv" "log" "math" ) type Image []float32 func main() { imageFilePath := "../../data/Lena.png" originalMat := gocv.IMRead(imageFilePath, gocv.IMReadGrayScale) if originalMat.Empty() { log.Panic("Can not read image: " + imageFilePath) return } originalImage := originalMat.ToBytes() targetImage := make(Image, len(originalImage)) for i := 0; i < len(targetImage); i++ { targetImage[i] = float32(originalImage[i]) / 255 } targetImage.zeroAverageMatrix() log.Println(targetImage) targetImage.dispersionMatrix() log.Println(targetImage) } func (image *Image) zeroAverageMatrix() { average := image.average() for i := 0; i < len(*image); i++ { (*image)[i] = (*image)[i] - average } } func (image *Image) dispersionMatrix() { average := image.average() tempImage := image.clone() length := len(tempImage) for i := 0; i < len...

[OpenCV] Chapter02-06 Gamma correction and per-element math

Image
Gamma correction and per-element math Source Code package main import ( "gocv.io/x/gocv" "log" "math" ) const GAMMA float64 = 0.5 func main() { imageFilePath := "../../data/Lena.png" originalMat := gocv.IMRead(imageFilePath, gocv.IMReadGrayScale) if originalMat.Empty() { log.Panic("Can not read image: " + imageFilePath) return } windowForOriginal := gocv.NewWindow("Original Image") defer windowForOriginal.Close() windowForOriginal.IMShow(originalMat) // corrected Image correctedImage := originalMat.ToBytes() for i := 0; i < len(correctedImage); i++ { correctedValue := uint8(math.Pow(float64(correctedImage[i])/255, GAMMA) * 255) correctedImage[i] = correctedValue } correctedMat, err := gocv.NewMatFromBytes(originalMat.Rows(), originalMat.Cols(), gocv.IMReadGrayScale, correctedImage) if err != nil { log.Panic("Can not convert bytes to Mat") return } windowForCorrect := gocv....

[OpenCV] Chapter02-05 Converting image from one color space to another

Image
Converting image from one color space to another Source Code package main import ( "gocv.io/x/gocv" "log" ) func main() { imageFilePath := "../../data/Lena.png" originalMat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if originalMat.Empty() { log.Panic("Can not read image: " + imageFilePath) return } // gray grayMat := gocv.NewMat() gocv.CvtColor(originalMat, &grayMat, gocv.ColorBGRToGray) windowForGray := gocv.NewWindow("Gray Image") defer windowForGray.Close() windowForGray.IMShow(grayMat) // hsv hsvMat := gocv.NewMat() gocv.CvtColor(originalMat, &hsvMat, gocv.ColorBGRToHSV) windowForHsv := gocv.NewWindow("HSV Image") defer windowForHsv.Close() windowForHsv.IMShow(hsvMat) // hsv extension hsvImage := hsvMat.ToBytes() for i := 2; i < len(hsvImage); i += 3 { hsvImage[i] = hsvImage[i] * 2 } hsvExtensionMat, err := gocv.NewMatFromBytes(hsvMat.Rows(), hsvMat.Cols(), gocv.M...

[OpenCV] Chapter02-04 Manipulating image channels

Image
Manipulating image channels Source Code package main import ( "gocv.io/x/gocv" "log" ) func main() { imageFilePath := "../../data/Lena.png" originalMat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if originalMat.Empty() { log.Panic("Can not read image: " + imageFilePath) return } image := originalMat.ToBytes() width := originalMat.Rows() height := originalMat.Cols() channel := originalMat.Channels() // swap red and blue(BGR) for row := 0; row < width; row++ { for col := 0; col < height; col++ { index := (width*row + col) * channel image[index], image[index+2] = image[index+2], image[index] } } matForSwap, err := gocv.NewMatFromBytes(width, height, gocv.MatTypeCV8UC3, image) if err != nil { log.Panic("Can not swap red and blue", err) return } windowForSwapRedAndBlue := gocv.NewWindow("Swap red and blue") defer windowForSwapRedAndBlue.Close() windowForSwapRedAndBlue.IMSh...

[OpenCV] Chapter02-03 Non-image data persistence

Image
Read image from file Source Code package main import ( "gocv.io/x/gocv" "io/ioutil" "log" "math/rand" ) const ( WIDTH = 300 HEIGHT = 300 CHANNEL = 3 ) func main() { filePath := "./random.cvs" newImage := createRandomImage(WIDTH, HEIGHT, CHANNEL) // save file err := ioutil.WriteFile(filePath, newImage, 0644) if err != nil { log.Panic("Can not write file", err) return } loadImage, err := ioutil.ReadFile(filePath) if err != nil { log.Panic("Can not read file", err) return } // show image mat, err := gocv.NewMatFromBytes(WIDTH, HEIGHT, gocv.MatTypeCV8UC3, loadImage) if err != nil { log.Panic("Can not convert bytes to Mat", err) return } window := gocv.NewWindow("Random Image") defer window.Close() window.IMShow(mat) // wait for { key := gocv.WaitKey(3) if key == 27 { log.Println("Pressed ESC") break } } } func createRandomIma...

[OpenCV] Chapter02-02 Converting between different data types and scaling values

Image
Read image from file Source Code package main import ( "gocv.io/x/gocv" "log" ) func main() { imageFilePath := "../../data/Lena.png" originalMat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if originalMat.Empty() { log.Panic("Can not read image: " + imageFilePath) return } // original Image log.Println("size:", originalMat.Size()) log.Println("type:", originalMat.Type()) // MatTypeCV8UC3 log.Println("channel:", originalMat.Channels()) windowForOriginal := gocv.NewWindow("Window Original") defer windowForOriginal.Close() windowForOriginal.IMShow(originalMat) // scale Image originalImage := originalMat.ToBytes() newImage := make([]uint8, len(originalImage)) for i := 0; i < len(originalImage); i++ { clipValue := float32(originalImage[i]) / 255 if clipValue*2 > 1 { newImage[i] = 1 } else { newImage[i] = 0 } } for i := 0; i < len(newImage); i++ { ne...

OpenCV] Chapter02-01 Manipulating matrices creating, filling, accessing elements, ROIs

Image
Manipulating matrices creating, filling, accessing elements, ROIs Source Code package main import ( "gocv.io/x/gocv" "log" ) const ( WIDTH = 480 HEIGHT = 640 CHANNEL = 3 ) type Matrix []uint8 func main() { matrix := make(Matrix, WIDTH*HEIGHT*CHANNEL) // white matrix.changeColor(255, 255, 255) mat, err := gocv.NewMatFromBytes(HEIGHT, WIDTH, gocv.MatTypeCV8UC3, matrix) if err != nil { log.Panic("Can not change bytes to Mat") return } windowForWhite := gocv.NewWindow("White") defer windowForWhite.Close() windowForWhite.IMShow(mat) // red matrix.changeColor(0, 0, 255) mat, err = gocv.NewMatFromBytes(HEIGHT, WIDTH, gocv.MatTypeCV8UC3, matrix) if err != nil { log.Panic("Can not change bytes to Mat") return } windowForRed := gocv.NewWindow("Red") defer windowForRed.Close() windowForRed.IMShow(mat) // black matrix.changeColor(0, 0, 0) mat, err = gocv.NewMatFromBytes(HEIGHT, WIDTH, go...

[OpenCV] Chapter01-13 Jumping between frames in video file

Image
Jumping between frames in video file Source Code package main import ( "gocv.io/x/gocv" "log" ) func main() { capture, err := gocv.VideoCaptureFile("../../data/drop.avi") if err != nil { log.Panic("Can not find video") return } defer capture.Close() frameCount := capture.Get(gocv.VideoCaptureFrameCount) log.Println("Frame Count:", frameCount) log.Println("Position:", int(capture.Get(gocv.VideoCapturePosFrames))) window1 := gocv.NewWindow("Window1") defer window1.Close() window2 := gocv.NewWindow("Window2") defer window2.Close() window3 := gocv.NewWindow("Window3") defer window3.Close() mat := gocv.NewMat() // window1 log.Println("Position:", capture.Get(gocv.VideoCapturePosFrames)) ok := capture.Read(&mat) if !ok { log.Fatal("Can not read frame") return } window1.IMShow(mat) // window2 log.Println("Position:", capture...

[OpenCV] Chapter01-12 Writing frame stream into video

Writing frame stream into video Source Code package main import ( "gocv.io/x/gocv" "log" ) func main() { capture, err := gocv.VideoCaptureDevice(0) if err != nil { log.Panic("Can not find capture source") return } defer capture.Close() frameWidth := int(capture.Get(gocv.VideoCaptureFrameWidth)) frameHeight := int(capture.Get(gocv.VideoCaptureFrameHeight)) log.Println("Frame width:", frameWidth) log.Println("Frame height:", frameHeight) videoWriter, err := gocv.VideoWriterFile("./captured_video.avi", "X264", 25, frameWidth, frameHeight, true) if err != nil { log.Panic("Can not open video writer") return } defer videoWriter.Close() window := gocv.NewWindow("Frame") defer window.Close() mat := gocv.NewMat() for { capture.Read(&mat) if mat.Empty() { log.Fatal("Can not get frame") break } err = videoWriter.Write(mat) if err != nil { ...

[OpenCV] Chapter01-11 Obtaining frame stream properties

Obtaining frame stream properties Source Code package main import ( "fmt" "github.com/pkg/errors" "gocv.io/x/gocv" "log" ) func main() { videoPath := "../../data/drop.avi" err := printCaptureProperties(videoPath) if err != nil { log.Panic("Could not print capture properties: " + videoPath) } cameraNo := 0 err = printCaptureProperties(cameraNo) if err != nil { log.Panic("Could not print capture properties: " + string(cameraNo)) } } func printCaptureProperties(param interface{}) error { var capture *gocv.VideoCapture var err error switch param.(type) { case int: capture, err = gocv.VideoCaptureDevice(param.(int)) case string: capture, err = gocv.VideoCaptureFile(param.(string)) default: return errors.New(fmt.Sprintf("%v is not supported type(%T)", param, param)) } if err != nil { log.Panic("Can not find capture source") return err } log.Println("--...

[OpenCV] Chapter01-10 Playing frame stream from video

Image
Playing frame stream from video Source Code package main import ( "gocv.io/x/gocv" "log" ) func main() { capture, err := gocv.VideoCaptureFile("../../data/drop.avi") if err != nil { log.Panic("Can not find video") return } defer capture.Close() window := gocv.NewWindow("Video") defer window.Close() mat := gocv.NewMat() for { ok := capture.Read(&mat) if !ok { log.Println("Reached the end of the video") break } window.IMShow(mat) key := window.WaitKey(1) if key == 27 { break } } } Execute Result

[OpenCV] Chapter01-09 Capturing and showing frames from camera

Image
Capturing and showing frames from camera Source Code package main import ( "gocv.io/x/gocv" "log" ) func main() { capture, err := gocv.VideoCaptureDevice(0) if err != nil { log.Panic("Can not find Camera...") return } defer capture.Close() window := gocv.NewWindow("Camera") defer window.Close() mat := gocv.NewMat() for { capture.Read(&mat) window.IMShow(mat) key := window.WaitKey(1) if key == 27 { break } } } Execute Result

[OpenCV] Chapter01-08 Making your app interactive via handling user input from mouse

Image
Read image from file Source Code package main import ( "gocv.io/x/gocv" "log" ) func main() { imageFilePath := "../../data/Lena.png" mat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if mat.Empty() { log.Panic("Can not read Image file : ", imageFilePath) return } matCopied := gocv.NewMat() mat.CopyTo(&matCopied) for { // gocv has yet no mouse event handler // so I use selectROI for capture image rectangle := gocv.SelectROI("Original Image", mat) regionMat := matCopied.Region(rectangle) if !regionMat.Empty() { log.Println(regionMat) capture := gocv.NewWindow("Capture") capture.IMShow(regionMat) } } } Execute Result

[OpenCV] Chapter01-07 Handling user input from keyboard

Image
Handling user input from keyboard Source Code package main import ( "gocv.io/x/gocv" "image" "image/color" "log" "math/rand" ) var ( width int height int ) func main() { imageFilePath := "../../data/Lena.png" mat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if mat.Empty() { log.Panic("Can not read Image file : ", imageFilePath) return } window := gocv.NewWindow("Handling user input from keyboard") defer window.Close() width, height = mat.Rows(), mat.Cols() matCopied := gocv.NewMat() mat.CopyTo(&matCopied) running := true for running { window.IMShow(matCopied) key := gocv.WaitKey(0) switch key { case int('p'): for i := 0; i < 10; i++ { gocv.Circle(&matCopied, getRandomPoint(), 3, color.RGBA{255, 0, 0, 0}, -1) } case int('l'): gocv.Line(&matCopied, getRandomPoint(), getRandomPoint(), color.RGBA{0, 255, 0, 0}, 3) ...

[OpenCV] Chapter01-06 Drawing 2d primitives_ markers, lines, ellipses, rectangles and text

Image
Drawing 2d primitives_ markers, lines, ellipses, rectangles and text Source Code package main import ( "image" "image/color" "log" "math/rand" "gocv.io/x/gocv" ) var ( width int height int ) func main() { imageFilePath := "../../data/Lena.png" mat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if mat.Empty() { log.Panic("Can not read Image file : ", imageFilePath) return } window := gocv.NewWindow("Drawing") defer window.Close() width, height = mat.Rows(), mat.Cols() // Circle gocv.Circle(&mat, getRandomPoint(), 40, color.RGBA{255, 0, 0, 0}, 1) gocv.Circle(&mat, getRandomPoint(), 5, color.RGBA{255, 0, 0, 0}, 2) gocv.Circle(&mat, getRandomPoint(), 40, color.RGBA{255, 85, 85, 0}, 2) gocv.Circle(&mat, getRandomPoint(), 40, color.RGBA{255, 170, 170, 0}, 2) // Line gocv.Line(&mat, getRandomPoint(), getRandomPoint(), color.RGBA{0, 255, 0, 0}, 1) gocv....

[OpenCV] Chapter01-05 Working with UI elements such as scrollbars in OpenCV window

Image
Working with UI elements such as scrollbars in OpenCV window Source Code package main import ( "log" "gocv.io/x/gocv" ) func main() { windowForTrackbar := gocv.NewWindow("Trackbar Window") defer windowForTrackbar.Close() trackbarR := windowForTrackbar.CreateTrackbar("R", 255) trackbarG := windowForTrackbar.CreateTrackbar("G", 255) trackbarB := windowForTrackbar.CreateTrackbar("B", 255) trackbarA := windowForTrackbar.CreateTrackbar("A", 10) mat := gocv.NewMatWithSize(300, 300, gocv.MatTypeCV8UC3) log.Println("-----------------------") log.Println("Rows:", mat.Rows()) log.Println("Cols:", mat.Cols()) for { // BGR blue := float64(trackbarB.GetPos()) green := float64(trackbarG.GetPos()) red := float64(trackbarR.GetPos()) alpha := float64(trackbarA.GetPos()) / 10 log.Println("-----------------------") log.Println("blue:", blue) log....

[OpenCV] Chapter01-04 Show image into window

Image
Show image into window Source Code package main import ( "log" "gocv.io/x/gocv" ) func main() { imageFilePath := "../../data/Lena.png" mat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if mat.Empty() { log.Panic("Can not read Image file : ", imageFilePath) return } window := gocv.NewWindow("Original Image") defer window.Close() window.IMShow(mat) gocv.WaitKey(5000) // if you want to show continually, 5000 -> -1 } Execute Result

[OpenCV] Chapter01-03 Save image for using lossy and lossless compression

Image
Save image for using lossy and lossless compression Source Code package main import ( "log" "gocv.io/x/gocv" ) func main() { imageFilePath := "../../data/Lena.png" mat := gocv.IMRead(imageFilePath, gocv.IMReadAnyColor) if mat.Empty() { log.Panic("Can not read Image file : ", imageFilePath) return } // PNG Lossless Compression compressedImageFilePathForPNG := "./Lena_compressed.png" gocv.IMWriteWithParams(compressedImageFilePathForPNG, mat, []int{gocv.IMWritePngCompression, 0}) saveImage := gocv.IMRead(compressedImageFilePathForPNG, gocv.IMReadAnyColor) if &saveImage == nil { log.Panic("Can not read Image file : ", compressedImageFilePathForPNG) return } // JPG Lossy Compression compressedImageFilePathForJPG := "./Lena_compressed.jpg" gocv.IMWriteWithParams(compressedImageFilePathForJPG, mat, []int{gocv.IMWriteJpegQuality, 0}) } Execute Result