{"id":16320297,"url":"https://github.com/hellonico/origami-kotlin-samples","last_synced_at":"2025-03-22T21:32:12.968Z","repository":{"id":66707071,"uuid":"369110956","full_name":"hellonico/origami-kotlin-samples","owner":"hellonico","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-14T01:53:08.000Z","size":14410,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-18T15:12:29.562Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hellonico.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-20T06:55:17.000Z","updated_at":"2024-11-11T05:55:50.000Z","dependencies_parsed_at":"2024-05-01T02:41:31.625Z","dependency_job_id":"e746a0d5-cef9-408b-9dfa-2a24059e25d2","html_url":"https://github.com/hellonico/origami-kotlin-samples","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellonico%2Forigami-kotlin-samples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellonico%2Forigami-kotlin-samples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellonico%2Forigami-kotlin-samples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellonico%2Forigami-kotlin-samples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hellonico","download_url":"https://codeload.github.com/hellonico/origami-kotlin-samples/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245022930,"owners_count":20548621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T22:43:53.443Z","updated_at":"2025-03-22T21:32:11.332Z","avatar_url":"https://github.com/hellonico.png","language":"Kotlin","readme":"## tobybreckon \u003e backgroundModel.kt\n\u003ca href=\"./src/main/kotlin/tobybreckon/backgroundModel.kt\"\u003ebackgroundModel.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val foreground = Mat()\n    val fg_mask = Mat()\n    val MoG = Video.createBackgroundSubtractorMOG2()\n    Camera().device(0).filter(Filter()\n        {\n            MoG.apply(it, fg_mask, 0.1)\n            cvtColor(fg_mask, fg_mask, COLOR_GRAY2BGR)\n            bitwise_and(it, fg_mask, foreground)\n            foreground\n        }\n    ).run()\n}\n```\n## tobybreckon \u003e hogPeopleDetection.kt\n\u003ca href=\"./src/main/kotlin/tobybreckon/hogPeopleDetection.kt\"\u003ehogPeopleDetection.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val HOG = HOGDescriptor()\n    HOG.setSVMDetector(HOGDescriptor.getDefaultPeopleDetector())\n    val foundLocations = MatOfRect()\n    val foundWeights = MatOfDouble()\n    val color = Scalar(255.0, 0.0, 0.0)\n    Camera().device(0).filter(Filter() {\n        HOG.detectMultiScale(\n            it, foundLocations, foundWeights, 0.0, Size(8.0, 8.0), Size(32.0, 32.0),\n            1.05, 8.0, false\n        )\n        drawLocations(foundLocations, it, color)\n    }).run()\n}\nprivate fun drawLocations(foundLocations: MatOfRect, it: Mat?, color: Scalar): Mat? {\n    val rectangles = foundLocations.toList()\n    for (i in rectangles.indices) {\n        rectangle(\n            it, Point(rectangles[i].x.toDouble(), rectangles[i].y.toDouble()),\n            Point(\n                (rectangles[i].x + rectangles[i].width).toDouble(),\n                (rectangles[i].y + rectangles[i].height).toDouble()\n            ),\n            color, 2, 1, 0\n        )\n    }\n    return it\n}\n```\n## dip \u003e ApplyingBoxFilter.kt\n\u003ca href=\"./src/main/kotlin/dip/ApplyingBoxFilter.kt\"\u003eApplyingBoxFilter.kt\u003c/a\u003e\n```java\nfun createKernelOfSize(kernelSize: Int): Mat {\n    val kernel = Mat.ones(kernelSize, kernelSize, CvType.CV_32F)\n    for (i in 0 until kernel.rows()) {\n        for (j in 0 until kernel.cols()) {\n            val m = kernel[i, j]\n            for (k in m.indices) {\n                m[k] = m[k] / (kernelSize * kernelSize)\n            }\n            kernel.put(i, j, *m)\n        }\n    }\n    return kernel\n}\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/grayscale.jpg\", IMREAD_GRAYSCALE)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val kernel5 = createKernelOfSize(5)\n    filter2D(source, destination, -1, kernel5)\n    imwrite(\"out/boxfilterKernel5.jpg\", destination)\n    val kernel9 = createKernelOfSize(9)\n    filter2D(source, destination, -1, kernel9)\n    imwrite(\"out/boxfilterKernel9.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e boxfilterKernel5.jpg**\n\n\u003cimg src=\"out/boxfilterKernel5.jpg\" height=25% width=25%/\u003e\n\n**\u003e boxfilterKernel9.jpg**\n\n\u003cimg src=\"out/boxfilterKernel9.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e GaussianFilter.kt\n\u003ca href=\"./src/main/kotlin/dip/GaussianFilter.kt\"\u003eGaussianFilter.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/digital_image_processing.jpg\", IMREAD_COLOR)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    GaussianBlur(source, destination, Size(11.0, 11.0), 0.0)\n    imwrite(\"out/gaussianblur1.jpg\", destination)\n    GaussianBlur(source, destination, Size(45.0, 45.0), 0.0)\n    imwrite(\"out/gaussianblur45.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003e gaussianblur1.jpg**\n\n\u003cimg src=\"out/gaussianblur1.jpg\" height=25% width=25%/\u003e\n\n**\u003e gaussianblur45.jpg**\n\n\u003cimg src=\"out/gaussianblur45.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e ApplyingWatermarkWithROI.kt\n\u003ca href=\"./src/main/kotlin/dip/ApplyingWatermarkWithROI.kt\"\u003eApplyingWatermarkWithROI.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/digital_image_processing.jpg\", IMREAD_COLOR)\n    val waterMark = imread(\"data/dip/watermark.jpg\", IMREAD_COLOR)\n    val ROI = Rect(20, 20, waterMark.cols(), waterMark.rows())\n    addWeighted(source.submat(ROI), 0.8, waterMark, 0.2, 1.0, source.submat(ROI))\n    imwrite(\"out/watermarkedROI.jpg\", source)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003c dip**\n\n\u003cimg src=\"data/dip/watermark.jpg\" height=25% width=25%/\u003e\n\n**\u003e watermarkedROI.jpg**\n\n\u003cimg src=\"out/watermarkedROI.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e EnhanceImageSharpness.kt\n\u003ca href=\"./src/main/kotlin/dip/EnhanceImageSharpness.kt\"\u003eEnhanceImageSharpness.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/digital_image_processing.jpg\", IMREAD_COLOR)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    GaussianBlur(source, destination, Size(1.0, 1.0), 10.0)\n    addWeighted(source, 1.5, destination, -0.5, 0.0, destination)\n    imwrite(\"out/sharp.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003e sharp.jpg**\n\n\u003cimg src=\"out/sharp.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e Sobel.kt\n\u003ca href=\"./src/main/kotlin/dip/Sobel.kt\"\u003eSobel.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    init()\n    val kernelSize = 3\n    val source = imread(\"data/dip/grayscale.jpg\", IMREAD_GRAYSCALE)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val kernel: Mat = object : Mat(kernelSize, kernelSize, CV_32F) {\n        init {\n            put(0, 0, -1.0)\n            put(0, 1, 0.0)\n            put(0, 2, 1.0)\n            put(1, 0, - 2.0)\n            put(1, 1, 0.0)\n            put(1, 2, 2.0)\n            put(2, 0, -1.0)\n            put(2, 1, 0.0)\n            put(2, 2, 1.0)\n        }\n    }\n    filter2D(source, destination, -1, kernel)\n    imwrite(\"out/sobel.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e sobel.jpg**\n\n\u003cimg src=\"out/sobel.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e EnhanceImageBrightness.kt\n\u003ca href=\"./src/main/kotlin/dip/EnhanceImageBrightness.kt\"\u003eEnhanceImageBrightness.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    var alpha = 2.0\n    var beta = 50.0\n    val source = imread(\"data/dip/digital_image_processing.jpg\", IMREAD_COLOR)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    source.convertTo(destination, -1, alpha, beta)\n    imwrite(\"out/brightWithAlpha2Beta50.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003e brightWithAlpha2Beta50.jpg**\n\n\u003cimg src=\"out/brightWithAlpha2Beta50.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e Prewitt.kt\n\u003ca href=\"./src/main/kotlin/dip/Prewitt.kt\"\u003ePrewitt.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    init()\n    val kernelSize = 3\n    val source = imread(\"data/dip/grayscale.jpg\", IMREAD_GRAYSCALE)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val kernel: Mat = object : Mat(kernelSize, kernelSize, CV_32F) {\n        init {\n            put(0, 0, -1.0)\n            put(0, 1, 0.0)\n            put(0, 2, 1.0)\n            put(1, 0, -1.0)\n            put(1, 1, 0.0)\n            put(1, 2, 1.0)\n            put(2, 0, -1.0)\n            put(2, 1, 0.0)\n            put(2, 2, 1.0)\n        }\n    }\n    filter2D(source, destination, -1, kernel)\n    imwrite(\"out/prewitt.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e prewitt.jpg**\n\n\u003cimg src=\"out/prewitt.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e ZoomingEffect.kt\n\u003ca href=\"./src/main/kotlin/dip/ZoomingEffect.kt\"\u003eZoomingEffect.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/grayscale.jpg\", IMREAD_GRAYSCALE)\n    val zoomingFactor = 3\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    resize(\n        source,\n        destination,\n        destination.size(),\n        zoomingFactor.toDouble(),\n        zoomingFactor.toDouble(),\n        INTER_LINEAR\n    )\n    imwrite(\"out/zoomed2.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e zoomed2.jpg**\n\n\u003cimg src=\"out/zoomed2.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e Kirsch.kt\n\u003ca href=\"./src/main/kotlin/dip/Kirsch.kt\"\u003eKirsch.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    init()\n    val kernelSize = 3\n    val source = imread(\"data/dip/grayscale.jpg\", IMREAD_GRAYSCALE)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val kernel: Mat = object : Mat(kernelSize, kernelSize, CV_32F) {\n        init {\n            put(0, 0, -3.0)\n            put(0, 1, -3.0)\n            put(0, 2, -3.0)\n            put(1, 0, -3.0)\n            put(1, 1, -3.0)\n            put(1, 2, -3.0)\n            put(2, 0, 5.0)\n            put(2, 1, 5.0)\n            put(2, 2, 5.0)\n        }\n    }\n    filter2D(source, destination, -1, kernel)\n    imwrite(\"out/kirsch.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e kirsch.jpg**\n\n\u003cimg src=\"out/kirsch.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e Pixelize.kt\n\u003ca href=\"./src/main/kotlin/dip/Pixelize.kt\"\u003ePixelize.kt\u003c/a\u003e\n```java\n/**\n * https://stackoverflow.com/questions/55508615/how-to-pixelate-image-using-opencv-in-python\n */\nfun main(args: Array\u003cString\u003e) {\n    init()\n    val (source, temp,target) = listOf(imread(\"data/bear.png\"), Mat(),Mat())\n     val (w, h) = listOf(16.0, 16.0)\n    resize(source, temp, Size(w, h), 1.0,1.0, INTER_LINEAR)\n    resize(temp, target, source.size(), 1.0,1.0,INTER_NEAREST)\n    imwrite(\"out/pixelized.jpg\", target)\n}\n```\n**\u003c bear.png**\n\n\u003cimg src=\"data/bear.png\" height=25% width=25%/\u003e\n\n**\u003e pixelized.jpg**\n\n\u003cimg src=\"out/pixelized.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e ImageShapeConversions.kt\n\u003ca href=\"./src/main/kotlin/dip/ImageShapeConversions.kt\"\u003eImageShapeConversions.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val input = File(\"data/dip/digital_image_processing.jpg\")\n    val image = ImageIO.read(input)\n    val data = (image.raster.dataBuffer as DataBufferByte).data\n    val mat = Mat(image.height, image.width, CvType.CV_8UC3)\n    mat.put(0, 0, data)\n    val mat1 = Mat(image.height, image.width, CvType.CV_8UC3)\n    flip(mat, mat1, -1)\n    val data1 = ByteArray(mat1.rows() * mat1.cols() * mat1.elemSize().toInt())\n    mat1[0, 0, data1]\n    val image1 = BufferedImage(mat1.cols(), mat1.rows(), 5)\n    image1.raster.setDataElements(0, 0, mat1.cols(), mat1.rows(), data1)\n    val outout = File(\"hsv.jpg\")\n    ImageIO.write(image1, \"jpg\", outout)\n}\n```\n## dip \u003e BasicThresholding.kt\n\u003ca href=\"./src/main/kotlin/dip/BasicThresholding.kt\"\u003eBasicThresholding.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/digital_image_processing.jpg\", IMREAD_COLOR)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    threshold(source, destination, 127.0, 255.0, THRESH_TOZERO)\n    imwrite(\"out/ThreshZero.jpg\", destination)\n    threshold(source, destination, 127.0, 255.0, THRESH_TOZERO_INV)\n    imwrite(\"out/ThreshZeroInv.jpg\", destination)\n    threshold(source, destination, 127.0, 255.0, THRESH_BINARY)\n    imwrite(\"out/ThreshBinary.jpg\", destination)\n    threshold(source, destination, 127.0, 255.0, THRESH_BINARY_INV)\n    imwrite(\"out/ThreshBinaryInv.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003e ThreshZero.jpg**\n\n\u003cimg src=\"out/ThreshZero.jpg\" height=25% width=25%/\u003e\n\n**\u003e ThreshZeroInv.jpg**\n\n\u003cimg src=\"out/ThreshZeroInv.jpg\" height=25% width=25%/\u003e\n\n**\u003e ThreshBinary.jpg**\n\n\u003cimg src=\"out/ThreshBinary.jpg\" height=25% width=25%/\u003e\n\n**\u003e ThreshBinaryInv.jpg**\n\n\u003cimg src=\"out/ThreshBinaryInv.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e EnhanceImageContrast.kt\n\u003ca href=\"./src/main/kotlin/dip/EnhanceImageContrast.kt\"\u003eEnhanceImageContrast.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/grayscale.jpg\", IMREAD_GRAYSCALE)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    equalizeHist(source, destination)\n    imwrite(\"out/contrast.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e contrast.jpg**\n\n\u003cimg src=\"out/contrast.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e ImagePyramid.kt\n\u003ca href=\"./src/main/kotlin/dip/ImagePyramid.kt\"\u003eImagePyramid.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    var source = imread(\"data/dip/digital_image_processing.jpg\", IMREAD_COLOR)\n    val destination1 = Mat(source.rows() * 2, source.cols() * 2, source.type())\n    pyrUp(source, destination1, Size((source.cols() * 2).toDouble(), (source.rows() * 2).toDouble()))\n    imwrite(\"out/pyrUp.jpg\", destination1)\n    source = imread(\"data/dip/digital_image_processing.jpg\", IMREAD_COLOR)\n    val destination = Mat(source.rows() / 2, source.cols() / 2, source.type())\n    pyrDown(source, destination, Size((source.cols() / 2).toDouble(), (source.rows() / 2).toDouble()))\n    imwrite(\"out/pyrDown.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003e pyrUp.jpg**\n\n\u003cimg src=\"out/pyrUp.jpg\" height=25% width=25%/\u003e\n\n**\u003e pyrDown.jpg**\n\n\u003cimg src=\"out/pyrDown.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e ErodingDilating.kt\n\u003ca href=\"./src/main/kotlin/dip/ErodingDilating.kt\"\u003eErodingDilating.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/digital_image_processing.jpg\", IMREAD_COLOR)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val erosion_size = 5\n    val element = getStructuringElement(\n        MORPH_RECT,\n        Size((2 * erosion_size + 1).toDouble(), (2 * erosion_size + 1).toDouble())\n    )\n    erode(source, destination, element)\n    imwrite(\"out/erosion.jpg\", destination)\n    val dilation_size = 5\n    val element1 = getStructuringElement(\n        MORPH_RECT,\n        Size((2 * dilation_size + 1).toDouble(), (2 * dilation_size + 1).toDouble())\n    )\n    dilate(source, destination, element1)\n    imwrite(\"out/dilation.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003e erosion.jpg**\n\n\u003cimg src=\"out/erosion.jpg\" height=25% width=25%/\u003e\n\n**\u003e dilation.jpg**\n\n\u003cimg src=\"out/dilation.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e AddingBorder.kt\n\u003ca href=\"./src/main/kotlin/dip/AddingBorder.kt\"\u003eAddingBorder.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/digital_image_processing.jpg\")\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val top = source.rows() / 20\n    val bottom = source.rows() / 20\n    val left = source.cols() / 20\n    val right = source.cols() / 20\n    copyMakeBorder(source, destination, top, bottom, left, right, BORDER_WRAP)\n    imwrite(\"out/borderWrap.jpg\", destination)\n    copyMakeBorder(source, destination, top, bottom, left, right, BORDER_REFLECT)\n    imwrite(\"out/borderReflect.jpg\", destination)\n    copyMakeBorder(source, destination, top, bottom, left, right, BORDER_REPLICATE)\n    imwrite(\"out/borderReplicate.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003e borderWrap.jpg**\n\n\u003cimg src=\"out/borderWrap.jpg\" height=25% width=25%/\u003e\n\n**\u003e borderReflect.jpg**\n\n\u003cimg src=\"out/borderReflect.jpg\" height=25% width=25%/\u003e\n\n**\u003e borderReplicate.jpg**\n\n\u003cimg src=\"out/borderReplicate.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e WeightedAverage.kt\n\u003ca href=\"./src/main/kotlin/dip/WeightedAverage.kt\"\u003eWeightedAverage.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val kernelSize = 9\n    val source = imread(\"data/dip/grayscale.jpg\", Imgcodecs.IMREAD_GRAYSCALE)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val kernel = Mat.ones(kernelSize, kernelSize, CvType.CV_32F)\n    for (i in 0 until kernel.rows()) {\n        for (j in 0 until kernel.cols()) {\n            val m = kernel[i, j]\n            for (k in m.indices) {\n                if (i == 1 \u0026\u0026 j == 1) {\n                    m[k] = (10 / 18).toDouble()\n                } else {\n                    m[k] = m[k] / 18\n                }\n            }\n            kernel.put(i, j, *m)\n        }\n    }\n    filter2D(source, destination, -1, kernel)\n    imwrite(\"out/weightedaveragefilter.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e weightedaveragefilter.jpg**\n\n\u003cimg src=\"out/weightedaveragefilter.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e Convolution.kt\n\u003ca href=\"./src/main/kotlin/dip/Convolution.kt\"\u003eConvolution.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    init()\n    val kernelSize = 3\n    val source = imread(\"data/dip/grayscale.jpg\", IMREAD_GRAYSCALE)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val kernel: Mat = object : Mat(kernelSize, kernelSize, CV_32F) {\n        init {\n            put(0, 0, 0.0)\n            put(0, 1, 0.0)\n            put(0, 2, 0.0)\n            put(1, 0, 0.0)\n            put(1, 1, 1.0)\n            put(1, 2, 0.0)\n            put(2, 0, 0.0)\n            put(2, 1, 0.0)\n            put(2, 2, 0.0)\n        }\n    }\n    filter2D(source, destination, -1, kernel)\n    imwrite(\"out/understand.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e understand.jpg**\n\n\u003cimg src=\"out/understand.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e Laplacian.kt\n\u003ca href=\"./src/main/kotlin/dip/Laplacian.kt\"\u003eLaplacian.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    init()\n    val kernelSize = 3\n    val source = imread(\"data/dip/grayscale.jpg\", IMREAD_GRAYSCALE)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val kernel: Mat = object : Mat(kernelSize, kernelSize, CV_32F) {\n        init {\n            put(0, 0, 0.0)\n            put(0, 1, -1.0)\n            put(0, 2, 0.0)\n            put(1, 0, - 1.0)\n            put(1, 1, 4.0)\n            put(1, 2, -1.0)\n            put(2, 0, 0.0)\n            put(2, 1, -1.0)\n            put(2, 2, 0.0)\n        }\n    }\n    filter2D(source, destination, -1, kernel)\n    imwrite(\"out/laplacian.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e laplacian.jpg**\n\n\u003cimg src=\"out/laplacian.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e ColorSpaceConversion.kt\n\u003ca href=\"./src/main/kotlin/dip/ColorSpaceConversion.kt\"\u003eColorSpaceConversion.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val mat = imread(\"data/dip/digital_image_processing.jpg\")\n    val mat1 = Mat(mat.width(), mat.height(), CvType.CV_8UC3)\n    cvtColor(mat, mat1, COLOR_RGB2HSV)\n    imwrite(\"out/hsv.jpg\", mat1)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003e hsv.jpg**\n\n\u003cimg src=\"out/hsv.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e Robinson.kt\n\u003ca href=\"./src/main/kotlin/dip/Robinson.kt\"\u003eRobinson.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    init()\n    val kernelSize = 3\n    val source = imread(\"data/dip/grayscale.jpg\", IMREAD_GRAYSCALE)\n    val destination = Mat(source.rows(), source.cols(), source.type())\n    val kernel: Mat = object : Mat(kernelSize, kernelSize, CV_32F) {\n        init {\n            put(0, 0, -1.0)\n            put(0, 1, 0.0)\n            put(0, 2, 1.0)\n            put(1, 0, - 2.0)\n            put(1, 1, 0.0)\n            put(1, 2, 2.0)\n            put(2, 0, -1.0)\n            put(2, 1, 0.0)\n            put(2, 2, 1.0)\n        }\n    }\n    filter2D(source, destination, -1, kernel)\n    imwrite(\"out/robinson.jpg\", destination)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/grayscale.jpg\" height=25% width=25%/\u003e\n\n**\u003e robinson.jpg**\n\n\u003cimg src=\"out/robinson.jpg\" height=25% width=25%/\u003e\n\n## dip \u003e ApplyingWatermark.kt\n\u003ca href=\"./src/main/kotlin/dip/ApplyingWatermark.kt\"\u003eApplyingWatermark.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val source = imread(\"data/dip/digital_image_processing.jpg\", IMREAD_COLOR)\n    putText(\n        source, \"dip.hellonico.info\", Point((source.rows() / 2).toDouble(), (source.cols() / 2).toDouble()),\n        FONT_ITALIC, 1.0, Scalar(255.0)\n    )\n    imwrite(\"out/watermarked.jpg\", source)\n}\n```\n**\u003c dip**\n\n\u003cimg src=\"data/dip/digital_image_processing.jpg\" height=25% width=25%/\u003e\n\n**\u003e watermarked.jpg**\n\n\u003cimg src=\"out/watermarked.jpg\" height=25% width=25%/\u003e\n\n## tutorialpoint \u003e BilateralFilter.kt\n\u003ca href=\"./src/main/kotlin/tutorialpoint/BilateralFilter.kt\"\u003eBilateralFilter.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val src = imread(\"data/marcel2019.jpg\")\n    val dst = Mat()\n    bilateralFilter(src, dst, 15, 80.0, 80.0, Core.BORDER_DEFAULT)\n    imwrite(\"out/bilateral.jpg\", dst)\n}\n```\n**\u003c marcel2019.jpg**\n\n\u003cimg src=\"data/marcel2019.jpg\" height=25% width=25%/\u003e\n\n**\u003e bilateral.jpg**\n\n\u003cimg src=\"out/bilateral.jpg\" height=25% width=25%/\u003e\n\n## tutorialpoint \u003e BoxFilter.kt\n\u003ca href=\"./src/main/kotlin/tutorialpoint/BoxFilter.kt\"\u003eBoxFilter.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val src = imread(\"data/marcel2019.jpg\")\n    val dst = Mat()\n    val size = Size(45.0, 45.0)\n    val point = Point(-1.0, -1.0)\n    boxFilter(src, dst, 50, size, point, true, Core.BORDER_DEFAULT)\n    imwrite(\"out/RboxFilter.jpg\", dst)\n}\n```\n**\u003c marcel2019.jpg**\n\n\u003cimg src=\"data/marcel2019.jpg\" height=25% width=25%/\u003e\n\n**\u003e RboxFilter.jpg**\n\n\u003cimg src=\"out/RboxFilter.jpg\" height=25% width=25%/\u003e\n\n## tutorialpoint \u003e SQRBoxFilterTest.kt\n\u003ca href=\"./src/main/kotlin/tutorialpoint/SQRBoxFilterTest.kt\"\u003eSQRBoxFilterTest.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val src = imread(\"data/marcel2019.jpg\")\n    val dst = Mat()\n    sqrBoxFilter(src, dst, -1, Size(1.0, 1.0))\n    imwrite(\"out/sqrBoxFilter.jpg\", dst)\n}\n```\n**\u003c marcel2019.jpg**\n\n\u003cimg src=\"data/marcel2019.jpg\" height=25% width=25%/\u003e\n\n**\u003e sqrBoxFilter.jpg**\n\n\u003cimg src=\"out/sqrBoxFilter.jpg\" height=25% width=25%/\u003e\n\n## tutorialpoint \u003e Filter2D.kt\n\u003ca href=\"./src/main/kotlin/tutorialpoint/Filter2D.kt\"\u003eFilter2D.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val src = imread(\"data/marcel2019.jpg\")\n    val dst = Mat()\n    val kernel = Mat.ones(5, 5, CvType.CV_32F)\n    for (i in 0 until kernel.rows()) {\n        for (j in 0 until kernel.cols()) {\n            val m:DoubleArray = kernel[i, j]\n            for (k in 1 until m.size) {\n                m[k] = m[k] / 2\n            }\n            kernel.put(i, j, *m)\n        }\n    }\n    println(kernel.dump())\n    filter2D(src, dst, -1, kernel)\n    imwrite(\"out/filter2d.jpg\", dst)\n}\n```\n**\u003c marcel2019.jpg**\n\n\u003cimg src=\"data/marcel2019.jpg\" height=25% width=25%/\u003e\n\n**\u003e filter2d.jpg**\n\n\u003cimg src=\"out/filter2d.jpg\" height=25% width=25%/\u003e\n\n## tutorialpoint \u003e BlurTest.kt\n\u003ca href=\"./src/main/kotlin/tutorialpoint/BlurTest.kt\"\u003eBlurTest.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val (src,dst) = listOf(imread(\"data/marcel.jpg\"), Mat())\n    blur(src, dst, Size(100.0, 100.0), Point(20.0, 30.0), BORDER_REFLECT)\n    imwrite(\"out/blurtest.jpg\", dst)\n}\n```\n**\u003c marcel.jpg**\n\n\u003cimg src=\"data/marcel.jpg\" height=25% width=25%/\u003e\n\n**\u003e blurtest.jpg**\n\n\u003cimg src=\"out/blurtest.jpg\" height=25% width=25%/\u003e\n\n## tutorialpoint \u003e GaussianTest.kt\n\u003ca href=\"./src/main/kotlin/tutorialpoint/GaussianTest.kt\"\u003eGaussianTest.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val src = imread(\"data/marcel2019.jpg\")\n    val dst = Mat()\n    GaussianBlur(src, dst, Size(45.0, 45.0), 0.0)\n    imwrite(\"out/gaussianmarcel.jpg\", dst)\n}\n```\n**\u003c marcel2019.jpg**\n\n\u003cimg src=\"data/marcel2019.jpg\" height=25% width=25%/\u003e\n\n**\u003e gaussianmarcel.jpg**\n\n\u003cimg src=\"out/gaussianmarcel.jpg\" height=25% width=25%/\u003e\n\n## tutorialpoint \u003e MedianTest.kt\n\u003ca href=\"./src/main/kotlin/tutorialpoint/MedianTest.kt\"\u003eMedianTest.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val src = imread(\"data/marcel2019.jpg\")\n    val dst = Mat()\n    medianBlur(src, dst, 15)\n    imwrite(\"out/medianmarcel.jpg\", dst)\n}\n```\n**\u003c marcel2019.jpg**\n\n\u003cimg src=\"data/marcel2019.jpg\" height=25% width=25%/\u003e\n\n**\u003e medianmarcel.jpg**\n\n\u003cimg src=\"out/medianmarcel.jpg\" height=25% width=25%/\u003e\n\n## stackoverflow \u003e OptimizingGrabcut.kt\n\u003ca href=\"./src/main/kotlin/stackoverflow/OptimizingGrabcut.kt\"\u003eOptimizingGrabcut.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val mat = imread(\"data/marcel2019.jpg\")\n    val result = extractFace(mat, 300, 1200, 300, 900)\n    imwrite(\"out/grabcut.jpg\", result)\n}\nfun extractFace(image: Mat, xOne: Int, xTwo: Int, yOne: Int, yTwo: Int): Mat {\n    val rectangle = Rect(xOne, yOne, xTwo, yTwo)\n    val result = Mat()\n    val bgdModel = Mat()\n    val fgdModel = Mat()\n    val source = Mat(1, 1, CvType.CV_8U, Scalar(3.0))\n    val iteration:Int = 1\n    grabCut(image, result, rectangle, bgdModel, fgdModel, iteration, GC_INIT_WITH_RECT)\n    compare(result, source, result, CMP_EQ)\n    val foreground = Mat(image.size(), CvType.CV_8UC3, Scalar(255.0, 255.0, 255.0))\n    image.copyTo(foreground, result)\n    return foreground\n}\n```\n**\u003c marcel2019.jpg**\n\n\u003cimg src=\"data/marcel2019.jpg\" height=25% width=25%/\u003e\n\n**\u003e grabcut.jpg**\n\n\u003cimg src=\"out/grabcut.jpg\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e GetPixel.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/GetPixel.kt\"\u003eGetPixel.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    // RGBカラー画像の画素値を取得\n    var data = DoubleArray(3)\n    data = im[100, 200]\n    println(\"Blue：\" + data[0])\n    println(\"Green：\" + data[1])\n    println(\"Red：\" + data[2])\n    // グレースケール画像の画素値を取得\n    val gray = Mat()\n    cvtColor(im, gray, COLOR_RGB2GRAY) // 画像のグレースケール変換\n    var data2 = DoubleArray(1)\n    data2 = gray[100, 200]\n    println(\"Gray：\" + data2[0])\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e Trimming.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/Trimming.kt\"\u003eTrimming.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    // 入力画像の取得\n    val im = imread(\"data/lupin3.jpeg\")\n    val roi = Rect(280, 60, 120, 100)\n    val im2 = Mat(im, roi)\n    // 結果を保存\n    imwrite(\"out/tanaka_trimming.png\", im2)\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_trimming.png**\n\n\u003cimg src=\"out/tanaka_trimming.png\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e DetectHSV.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/DetectHSV.kt\"\u003eDetectHSV.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val hsv = Mat()\n    val mask = Mat()\n    val im2 = Mat()\n    cvtColor(im, hsv, COLOR_BGR2HSV) // HSV色空間に変換\n    inRange(hsv, Scalar(100.0, 10.0, 0.0), Scalar(140.0, 255.0, 255.0), mask) // 緑色領域のマスク作成\n    im.copyTo(im2, mask) // マスクを 用いて入力画像から緑色領域を抽出\n    imwrite(\"out/tanakahsvmask.jpg\", im2) // 画像の出力\n    bitwise_not(mask, mask)\n    val im3 = Mat()\n    im.copyTo(im3, mask) // マスクを 用いて入力画像から緑色領域を抽出\n    imwrite(\"out/tanakahsv.jpg\", im3) // 画像の出力\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanakahsvmask.jpg**\n\n\u003cimg src=\"out/tanakahsvmask.jpg\" height=25% width=25%/\u003e\n\n**\u003e tanakahsv.jpg**\n\n\u003cimg src=\"out/tanakahsv.jpg\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e Mosaic.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/Mosaic.kt\"\u003eMosaic.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    resize(im, im, Size(), 0.1, 0.1, INTER_NEAREST) // 画像サイズを1/10倍\n    resize(im, im, Size(), 10.0, 10.0, INTER_NEAREST) // 画像サイズを10倍\n    imwrite(\"out/tanaka_mosaic.jpg\", im) // 画像の出力\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_mosaic.jpg**\n\n\u003cimg src=\"out/tanaka_mosaic.jpg\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e Gamma.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/Gamma.kt\"\u003eGamma.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val gamma = 1.0 // ガンマ定数\n    // ルックアップテーブルの計算\n    val lut = Mat(1, 256, CvType.CV_8UC1) //　ルックアップテーブル作成\n    lut.setTo(Scalar(0.0))\n    for (i in 0..255) {\n        lut.put(0, i, Math.pow(1.0 * i / 255, 1 / gamma) * 255)\n    }\n    // ガンマ変換\n    Core.LUT(im, lut, im)\n    // 画像の出力\n    imwrite(\"out/tanaka_gamma.jpg\", im)\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_gamma.jpg**\n\n\u003cimg src=\"out/tanaka_gamma.jpg\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e Grabcut.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/Grabcut.kt\"\u003eGrabcut.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val mask = Mat() // マスク画像用\n    val bgModel = Mat() // 背景モデル用\n    val fgModel = Mat() // 前景モデル用\n    val rect = Rect(10, 10, 250, 290) // 大まかな前景と背景の境目(矩形)\n    val source = Mat(1, 1, CvType.CV_8U, Scalar(3.0))\n    grabCut(im, mask, rect, bgModel, fgModel, 1, 0) // グラフカットで前景と背景を分離\n    Core.compare(mask, source, mask, Core.CMP_EQ)\n    val fg = Mat(im.size(), CvType.CV_8UC1, Scalar(0.0, 0.0, 0.0)) // 前景画像用\n    im.copyTo(fg, mask) // 前景画像の作成\n    imwrite(\"out/tanaka_grabcut.jpg\", fg) // 画像の出力\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_grabcut.jpg**\n\n\u003cimg src=\"out/tanaka_grabcut.jpg\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e FastNlMeans.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/FastNlMeans.kt\"\u003eFastNlMeans.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    Photo.fastNlMeansDenoising(im, im)\n    imwrite(\"out/tanaka_denoising.jpg\", im) // 画像の出力\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_denoising.jpg**\n\n\u003cimg src=\"out/tanaka_denoising.jpg\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e EqualizeHistgram.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/EqualizeHistgram.kt\"\u003eEqualizeHistgram.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val gray = Mat()\n    cvtColor(im, gray, COLOR_RGB2GRAY) // 画像のグレースケール変換\n    equalizeHist(gray, gray) // グレースケール画像のヒストグラムを平坦化\n    imwrite(\"out/tanaka_hist.jpg\", gray) // 画像の出力\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_hist.jpg**\n\n\u003cimg src=\"out/tanaka_hist.jpg\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e TemplateMatching.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/TemplateMatching.kt\"\u003eTemplateMatching.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val tmp = imread(\"data/lupin_head.jpg\") // テンプレート画像の取得\n    val result = Mat()\n    matchTemplate(im, tmp, result, TM_CCOEFF_NORMED) //テンプレートマッチング\n    threshold(result, result, 0.8, 1.0, THRESH_TOZERO) // 検出結果から相関係数がしきい値以下の部分を削除\n    // テンプレート画像の部分を元画像に赤色の矩形で囲む\n    for (i in 0 until result.rows()) {\n        for (j in 0 until result.cols()) {\n            if (result[i, j][0] \u003e 0) {\n                rectangle(\n                    im,\n                    Point(j.toDouble(), i.toDouble()),\n                    Point((j + tmp.cols()).toDouble(), (i + tmp.rows()).toDouble()),\n                    Scalar(0.0, 0.0, 255.0)\n                )\n            }\n        }\n    }\n    imwrite(\"out/tanaka_match.jpg\", im) // 画像の出力\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003c lupin_head.jpg**\n\n\u003cimg src=\"data/lupin_head.jpg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_match.jpg**\n\n\u003cimg src=\"out/tanaka_match.jpg\" height=25% width=25%/\u003e\n\n## tanaka79image \u003e Canny.kt\n\u003ca href=\"./src/main/kotlin/tanaka79image/Canny.kt\"\u003eCanny.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val gray = Mat()\n    cvtColor(im, gray, COLOR_RGB2GRAY) // グレースケール変換\n    Canny(gray, gray, 400.0, 500.0, 5, true) // Cannyアルゴリズムで輪郭検出\n    imwrite(\"out/tanaka_canny.jpg\", gray) // エッジ画像の出力\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_canny.jpg**\n\n\u003cimg src=\"out/tanaka_canny.jpg\" height=25% width=25%/\u003e\n\n## me \u003e hello.kt\n\u003ca href=\"./src/main/kotlin/me/hello.kt\"\u003ehello.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val hello = eye(3, 3, CV_8UC1)\n    println(hello.dump())\n}\n```\n## me \u003e BodyTransfer.kt\n\u003ca href=\"./src/main/kotlin/me/BodyTransfer.kt\"\u003eBodyTransfer.kt\u003c/a\u003e\n```java\nconst val DEFAULT_CLASSIFIER =\n    \"https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_upperbody.xml\"\nconst val DEFAULT_IMAGE = \"https://www.netclipart.com/pp/m/106-1066497_suit-man-png-man-in-suit-png.png\"\nconst val CLASSIFIER_PATH = \"haarcascade.xml\"\nval COLOR = Scalar(0.0, 100.0, 0.0)\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val imageUrl = if (args.size \u003e= 1 \u0026\u0026 args[0] != null) args[0] else DEFAULT_IMAGE\n    val classifierUrl = if (args.size \u003e= 2 \u0026\u0026 args[1] != null) args[1] else DEFAULT_CLASSIFIER\n    Downloader.transfer(imageUrl, \"data/image.jpg\")\n    Downloader.transfer(classifierUrl, CLASSIFIER_PATH)\n    val classifier = CascadeClassifier()\n    classifier.load(CLASSIFIER_PATH)\n    val mat = imread(\"data/image.jpg\")\n    val bodies = MatOfRect()\n    classifier.detectMultiScale(mat, bodies)\n    for (body in bodies.toList()) {\n        Imgproc.rectangle(\n            mat,\n            Point(body.x.toDouble(), body.y.toDouble()),\n            Point((body.x + body.width).toDouble(), (body.y + body.height).toDouble()),\n            COLOR,\n            3\n        )\n    }\n    imwrite(\"out/bodytransfer.jpg\", mat)\n}\n```\n**\u003c image.jpg**\n\n\u003cimg src=\"data/image.jpg\" height=25% width=25%/\u003e\n\n**\u003e bodytransfer.jpg**\n\n\u003cimg src=\"out/bodytransfer.jpg\" height=25% width=25%/\u003e\n\n## geeksforgeeks \u003e InPainting.kt\n\u003ca href=\"./src/main/kotlin/geeksforgeeks/InPainting.kt\"\u003eInPainting.kt\u003c/a\u003e\n```java\n/**\n * https://www.geeksforgeeks.org/introduction-to-opencv/\n */\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val img = imread(\"data/geeksforgeeks/cat_damaged.png\")\n    val mask = imread(\"data/geeksforgeeks/cat_mask.png\", 0)\n    val dst = Mat()\n    inpaint(img, mask, dst, 3.0, INPAINT_NS)\n    imwrite(\"out/cat_inpainted.png\", dst)\n}\n```\n**\u003c geeksforgeeks**\n\n\u003cimg src=\"data/geeksforgeeks/cat_damaged.png\" height=25% width=25%/\u003e\n\n**\u003c geeksforgeeks**\n\n\u003cimg src=\"data/geeksforgeeks/cat_mask.png\" height=25% width=25%/\u003e\n\n**\u003e cat_inpainted.png**\n\n\u003cimg src=\"out/cat_inpainted.png\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e Level.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/Level.kt\"\u003eLevel.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val n = 100 // 大きいほど階調数が減少\n    // 減色処理\n    val sz = im.size()\n    var i = 0\n    while (i \u003c sz.height) {\n        var j = 0\n        while (j \u003c sz.width) {\n            val pixcel = im[i, j]\n            pixcel[0] = (pixcel[0].toInt() / n * n + n / 2).toDouble()\n            pixcel[1] = (pixcel[1].toInt() / n * n + n / 2).toDouble()\n            pixcel[2] = (pixcel[2].toInt() / n * n + n / 2).toDouble()\n            im.put(i, j, *pixcel)\n            j++\n        }\n        i++\n    }\n    imwrite(\"out/tanaka_level.jpg\", im) // 画像データをJPG形式で保存\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_level.jpg**\n\n\u003cimg src=\"out/tanaka_level.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e MedianBlur.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/MedianBlur.kt\"\u003eMedianBlur.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val dst = Mat()\n    medianBlur(im, dst, 5)\n    imwrite(\"out/tanaka_median.jpg\", dst) // 出力画像の保存\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_median.jpg**\n\n\u003cimg src=\"out/tanaka_median.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e HoughLinesP.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/HoughLinesP.kt\"\u003eHoughLinesP.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val gray = Mat(im.rows(), im.cols(), CvType.CV_8SC1)\n    cvtColor(im, gray, COLOR_RGB2GRAY) // グレースケール変換\n    Canny(gray, gray, 80.0, 100.0) // 輪郭線検出\n    val lines = Mat()\n    // 確率的ハフ変換で直線検出\n    HoughLinesP(gray, lines, 1.0, Math.PI / 180, 50, 100.0, 50.0)\n    var data: DoubleArray\n    val pt1 = Point()\n    val pt2 = Point()\n    // 検出した直線上を赤線で塗る\n    for (i in 0 until lines.cols()) {\n        data = lines[0, i]\n        pt1.x = data[0]\n        pt1.y = data[1]\n        pt2.x = data[2]\n        pt2.y = data[3]\n        line(im, pt1, pt2, Scalar(0.0, 0.0, 200.0), 3)\n    }\n    imwrite(\"out/tanaka_houghlinesp.jpg\", im) // 出力画像の保存\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_houghlinesp.jpg**\n\n\u003cimg src=\"out/tanaka_houghlinesp.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e Sobel.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/Sobel.kt\"\u003eSobel.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val gray = imread(\"data/lupin3.jpeg\", 0)\n    Sobel(gray, gray, gray.depth(), 2, 2)\n    imwrite(\"out/tanaka_sobel.jpg\", gray)\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_sobel.jpg**\n\n\u003cimg src=\"out/tanaka_sobel.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e Cluster.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/Cluster.kt\"\u003eCluster.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val img = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val k = 2\n    val clusters = cluster(img, k)[0]\n    imwrite(\"out/tanaka_cluster.png\", clusters) // 画像をJPG形式で保存\n}\nfun cluster(cutout: Mat, k: Int): List\u003cMat\u003e {\n    val samples = cutout.reshape(1, cutout.cols() * cutout.rows())\n    val samples32f = Mat()\n    samples.convertTo(samples32f, CvType.CV_32F, 1.0 / 255.0)\n    val labels = Mat()\n    val criteria = TermCriteria(TermCriteria.COUNT, 100, 1.0)\n    val centers = Mat()\n    Core.kmeans(samples32f, k, labels, criteria, 1, Core.KMEANS_PP_CENTERS, centers)\n    return showClusters(cutout, labels, centers)\n}\nprivate fun showClusters(cutout: Mat, labels: Mat, centers: Mat): List\u003cMat\u003e {\n    centers.convertTo(centers, CvType.CV_8UC1, 255.0)\n    centers.reshape(3)\n    val clusters: MutableList\u003cMat\u003e = ArrayList()\n    for (i in 0 until centers.rows()) {\n        clusters.add(Mat.zeros(cutout.size(), cutout.type()))\n    }\n    val counts: MutableMap\u003cInt, Int\u003e = HashMap()\n    for (i in 0 until centers.rows()) counts[i] = 0\n    var rows = 0\n    for (y in 0 until cutout.rows()) {\n        for (x in 0 until cutout.cols()) {\n            val label = labels[rows, 0][0].toInt()\n            val r = centers[label, 2][0].toInt()\n            val g = centers[label, 1][0].toInt()\n            val b = centers[label, 0][0].toInt()\n            clusters[label].put(y, x, b.toDouble(), g.toDouble(), r.toDouble())\n            rows++\n        }\n    }\n    return clusters\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_cluster.png**\n\n\u003cimg src=\"out/tanaka_cluster.png\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e Resize.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/Resize.kt\"\u003eResize.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val im2 = Mat()\n    val im3 = Mat()\n    val sz = im.size()\n    resize(im, im2, Size(sz.width * 2, sz.height * 2)) // 2倍拡大\n    resize(im, im3, Size(sz.width * 0.5, sz.height * 0.5)) // 1/2倍に縮小\n    imwrite(\"out/tanaka_resize2.jpg\", im2) // 出力画像の保存\n    imwrite(\"out/tanaka_resize05.jpg\", im3) // 出力画像の保存\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_resize2.jpg**\n\n\u003cimg src=\"out/tanaka_resize2.jpg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_resize05.jpg**\n\n\u003cimg src=\"out/tanaka_resize05.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e HoughLines.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/HoughLines.kt\"\u003eHoughLines.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val gray = Mat(im.rows(), im.cols(), CvType.CV_8SC1)\n    cvtColor(im, gray, COLOR_RGB2GRAY) // グレースケール変換\n    Canny(gray, gray, 70.0, 110.0) // 輪郭線検出\n    val lines = Mat()\n    // 古典的ハフ変換で直線検出\n    HoughLines(gray, lines, 1.0, 2 * Math.PI / 180, 20)\n    // 検出した直線上を赤線で塗る\n    for (i in 0 until lines.cols()) {\n        val data = lines[0, i]\n        val rho = data[0]\n        val theta = data[1]\n        val cosTheta = Math.cos(theta)\n        val sinTheta = Math.sin(theta)\n        val x0 = cosTheta * rho\n        val y0 = sinTheta * rho\n        val pt1 = Point(x0 + 10000 * -sinTheta, y0 + 10000 * cosTheta)\n        val pt2 = Point(x0 - 10000 * -sinTheta, y0 - 10000 * cosTheta)\n        line(im, pt1, pt2, Scalar(0.0, 0.0, 200.0), 3)\n    }\n    imwrite(\"out/tanaka_houghlines.jpg\", im) // 出力画像の保存\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_houghlines.jpg**\n\n\u003cimg src=\"out/tanaka_houghlines.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e BoxFilter.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/BoxFilter.kt\"\u003eBoxFilter.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val dst = Mat()\n    blur(im, dst, Size(5.0, 5.0))\n    imwrite(\"out/tanaka_blur.jpg\", dst) // 出力画像の保存\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_blur.jpg**\n\n\u003cimg src=\"out/tanaka_blur.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e Invert.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/Invert.kt\"\u003eInvert.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    Core.bitwise_not(im, im) // 色反転(Not演算)\n    imwrite(\"out/tanaka_invert.jpg\", im) // 出力画像の保存\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_invert.jpg**\n\n\u003cimg src=\"out/tanaka_invert.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e AnimeFaceDetect.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/AnimeFaceDetect.kt\"\u003eAnimeFaceDetect.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    // 入力画像の取得\n    val im = imread(\"data/lupin3.jpeg\")\n    // カスケード分類器でアニメ顔探索\n    val faceDetector = CascadeClassifier(\"data/nagadomi/lbpcascade_animeface.xml\")\n    val faceDetections = MatOfRect()\n    faceDetector.detectMultiScale(im, faceDetections)\n    // 見つかったアニメ顔を矩形で囲む\n    for (rect in faceDetections.toArray()) {\n        rectangle(\n            im,\n            Point(rect.x.toDouble(), rect.y.toDouble()),\n            Point((rect.x + rect.width).toDouble(), (rect.y + rect.height).toDouble()),\n            Scalar(0.0, 0.0, 255.0),\n            5\n        )\n    }\n    // 結果を保存\n    imwrite(\"out/anime_face.png\", im)\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e anime_face.png**\n\n\u003cimg src=\"out/anime_face.png\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e HoughCircles.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/HoughCircles.kt\"\u003eHoughCircles.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val gray = Mat(im.rows(), im.cols(), CvType.CV_8SC1)\n    cvtColor(im, gray, COLOR_RGB2GRAY) // グレースケール変換\n    //Imgproc.Canny(gray, gray, 80, 100);\t\t\t\t\t\t\t\t\t\t// 輪郭線検出\n    val circles = Mat()\n    // ハフ変換で円検出\n    HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 2.0, 10.0, 160.0, 50.0, 10, 20)\n    val pt = Point()\n    // 検出した直線上を赤線で塗る\n    for (i in 0 until circles.cols()) {\n        val data = circles[0, i]\n        pt.x = data[0]\n        pt.y = data[1]\n        val rho = data[2]\n        circle(im, pt, rho.toInt(), Scalar(0.0, 200.0, 0.0), 5)\n    }\n    imwrite(\"out/tanaka_circles.jpg\", im) // 出力画像の保存\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_circles.jpg**\n\n\u003cimg src=\"out/tanaka_circles.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e Sift.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/Sift.kt\"\u003eSift.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val im = imread(\"data/lupin3.jpeg\") // 入力画像の取得\n    val gray = Mat()\n    cvtColor(im, gray, COLOR_RGB2GRAY) // 画像のグレースケール変換\n    // ------ SIFTの処理 ここから ------\n    val siftDetector = SIFT.create()\n    val kp = MatOfKeyPoint()\n    siftDetector.detect(gray, kp)\n    // -- Draw keypoints\n    Features2d.drawKeypoints(im, kp, im)\n    imwrite(\"out/tanaka_sift.jpg\", im) // 画像の出力\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_sift.jpg**\n\n\u003cimg src=\"out/tanaka_sift.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e FaceDetect.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/FaceDetect.kt\"\u003eFaceDetect.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    // 入力画像の取得\n    val im = Imgcodecs.imread(\"data/lupin3.jpeg\")\n    // カスケード分類器で顔探索\n    val faceDetector = CascadeClassifier(\"data/haarcascades/haarcascade_frontalface_alt.xml\")\n    val faceDetections = MatOfRect()\n    faceDetector.detectMultiScale(im, faceDetections)\n    // 見つかった顔を矩形で囲む\n    for (rect in faceDetections.toArray()) {\n        Imgproc.rectangle(\n            im,\n            Point(rect.x.toDouble(), rect.y.toDouble()),\n            Point((rect.x + rect.width).toDouble(), (rect.y + rect.height).toDouble()),\n            Scalar(0.0, 0.0, 255.0),\n            5\n        )\n    }\n    // 結果を保存\n    Imgcodecs.imwrite(\"out/tanaka_face.jpg\", im)\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_face.jpg**\n\n\u003cimg src=\"out/tanaka_face.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e Laplacian.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/Laplacian.kt\"\u003eLaplacian.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val gray = imread(\"data/lupin3.jpeg\", 0)\n    Laplacian(gray, gray, gray.depth())\n    imwrite(\"out/tanaka_laplacian.jpg\", gray)\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_laplacian.jpg**\n\n\u003cimg src=\"out/tanaka_laplacian.jpg\" height=25% width=25%/\u003e\n\n## tanaka79 \u003e Canny.kt\n\u003ca href=\"./src/main/kotlin/tanaka79/Canny.kt\"\u003eCanny.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    Origami.init()\n    val gray = imread(\"data/lupin3.jpeg\", 0) // 入力画像の取得\n    Canny(gray, gray, 100.0, 200.0, 3, true)\n    imwrite(\"out/tanaka_canny.jpg\", gray) // 画像データをJPG形式で保存\n}\n```\n**\u003c lupin3.jpeg**\n\n\u003cimg src=\"data/lupin3.jpeg\" height=25% width=25%/\u003e\n\n**\u003e tanaka_canny.jpg**\n\n\u003cimg src=\"out/tanaka_canny.jpg\" height=25% width=25%/\u003e\n\n## webcam \u003e simple.kt\n\u003ca href=\"./src/main/kotlin/webcam/simple.kt\"\u003esimple.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    init()\n    Camera().run()\n}\n```\n## webcam \u003e simpleWithFilter.kt\n\u003ca href=\"./src/main/kotlin/webcam/simpleWithFilter.kt\"\u003esimpleWithFilter.kt\u003c/a\u003e\n```java\nfun main(args: Array\u003cString\u003e) {\n    init()\n    Camera().filter(Function { im -\u003e\n        val (temp,target) = listOf(Mat(), Mat())\n        val dx = 16.0\n        resize(im, temp, Size(dx, dx), 1.0, 1.0, INTER_LINEAR)\n        resize(temp, target, im.size(), 1.0, 1.0, INTER_NEAREST)\n        target\n    }).run()\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellonico%2Forigami-kotlin-samples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhellonico%2Forigami-kotlin-samples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellonico%2Forigami-kotlin-samples/lists"}