Golang 이미지 조작: 히스토그램 평준화 및 이미지의 전역 임계값 지정을 수행하는 방법 알아보기
Golang 이미지 작업: 이미지의 히스토그램 평준화 및 전역 임계값 지정을 수행하는 방법을 알아보세요.
소개:
이미지 처리는 컴퓨터 비전 및 이미지 처리 분야에서 중요한 작업 중 하나입니다. 실제 응용 프로그램에서는 이미지 품질을 향상하거나 이미지의 특정 특징을 강조하기 위해 일부 이미지 향상 작업을 수행해야 하는 경우가 많습니다. 이 기사에서는 Golang을 사용하여 이미지 향상을 달성하기 위해 이미지에 대한 히스토그램 균등화 및 전역 임계값 작업을 수행하는 방법을 소개합니다.
1. 히스토그램 평준화
히스토그램 평준화는 일반적으로 사용되는 이미지 향상 방법으로 이미지 픽셀의 회색조 분포를 조정하여 이미지의 대비를 향상시킵니다. 이 방법에서는 먼저 이미지의 누적 히스토그램을 계산한 후, 누적 히스토그램을 기반으로 이미지의 픽셀 값을 조정합니다.
다음은 이미지의 히스토그램 평준화를 구현하기 위한 간단한 Golang 코드 예입니다.
package main import ( "fmt" "image" "image/color" "image/jpeg" "os" ) func main() { // 打开图片文件 file, err := os.Open("input.jpg") if err != nil { fmt.Println(err) return } defer file.Close() // 解码图片 img, _, err := image.Decode(file) if err != nil { fmt.Println(err) return } // 计算直方图 hist := histogram(img) // 计算累积直方图 cumHist := cumulativeHistogram(hist) // 根据累积直方图对图像进行像素值调整 newImg := adjustPixels(img, cumHist) // 保存处理后的图像 outFile, err := os.Create("output.jpg") if err != nil { fmt.Println(err) return } defer outFile.Close() // 编码图像 err = jpeg.Encode(outFile, newImg, &jpeg.Options{Quality: 100}) if err != nil { fmt.Println(err) return } fmt.Println("图像处理完成!") } // 计算直方图 func histogram(img image.Image) []int { bounds := img.Bounds() w, h := bounds.Max.X, bounds.Max.Y hist := make([]int, 256) for y := 0; y < h; y++ { for x := 0; x < w; x++ { r, _, _, _ := img.At(x, y).RGBA() gray := color.Gray{uint8(r / 256)} hist[gray.Y]++ } } return hist } // 计算累积直方图 func cumulativeHistogram(hist []int) []int { cumHist := make([]int, len(hist)) cumHist[0] = hist[0] for i := 1; i < len(hist); i++ { cumHist[i] = cumHist[i-1] + hist[i] } return cumHist } // 根据累积直方图调整像素值 func adjustPixels(img image.Image, cumHist []int) image.Image { bounds := img.Bounds() w, h := bounds.Max.X, bounds.Max.Y newImg := image.NewRGBA(bounds) for y := 0; y < h; y++ { for x := 0; x < w; x++ { r, g, b, a := img.At(x, y).RGBA() gray := color.Gray{uint8(r / 256)} val := uint8(float64(cumHist[gray.Y]) / float64(w*h) * 255) newImg.Set(x, y, color.RGBA{val, val, val, uint8(a / 256)}) } } return newImg }
위 코드에서는 먼저 image
패키지의 Decode
를 전달합니다. 입력 이미지 파일을 image.Image
유형의 객체로 디코딩합니다. 그런 다음 histogram
함수를 호출하여 이미지의 히스토그램을 계산하고 cumulativeHistogram
함수를 호출하여 이미지의 누적 히스토그램을 계산합니다. 마지막으로 누적 히스토그램을 기반으로 이미지의 픽셀 값을 조정하고 jpeg
패키지의 Encode
기능을 사용하여 처리된 이미지를 파일로 저장합니다. image
包的Decode
函数将输入图像文件解码为image.Image
类型的对象。然后,我们分别调用histogram
函数计算图像的直方图,cumulativeHistogram
函数计算图像的累积直方图。最后,我们根据累积直方图调整图像的像素值,并使用jpeg
包的Encode
函数将处理后的图像保存到文件中。
二、全局阈值化
全局阈值化是一种简单但有效的图像二值化方法,它将图像的像素值分为两个互不重叠的光滑区域,分别代表目标物体和背景。这种方法通常应用于具有明显的前景和背景差异的图像。
下面是一个简单的Golang代码示例,用于实现图像的全局阈值化:
package main import ( "fmt" "image" "image/color" "image/jpeg" "os" ) func main() { // 打开图片文件 file, err := os.Open("input.jpg") if err != nil { fmt.Println(err) return } defer file.Close() // 解码图片 img, _, err := image.Decode(file) if err != nil { fmt.Println(err) return } // 根据全局阈值对图像进行二值化处理 newImg := binarize(img) // 保存处理后的图像 outFile, err := os.Create("output.jpg") if err != nil { fmt.Println(err) return } defer outFile.Close() // 编码图像 err = jpeg.Encode(outFile, newImg, &jpeg.Options{Quality: 100}) if err != nil { fmt.Println(err) return } fmt.Println("图像处理完成!") } // 根据全局阈值对图像进行二值化处理 func binarize(img image.Image) image.Image { bounds := img.Bounds() w, h := bounds.Max.X, bounds.Max.Y newImg := image.NewRGBA(bounds) threshold := calculateThreshold(img) for y := 0; y < h; y++ { for x := 0; x < w; x++ { r, g, b, a := img.At(x, y).RGBA() gray := color.Gray{uint8(r / 256)} var val uint8 if gray.Y > threshold { val = 255 } else { val = 0 } newImg.Set(x, y, color.RGBA{val, val, val, uint8(a / 256)}) } } return newImg } // 根据图像的直方图计算全局阈值 func calculateThreshold(img image.Image) uint8 { hist := histogram(img) totalPixels := img.Bounds().Max.X * img.Bounds().Max.Y // 计算背景像素值的总和 var bgSum, bgCount, fgSum, fgCount int for i := 0; i < len(hist); i++ { if i <= 128 { bgSum += i * hist[i] bgCount += hist[i] } else { fgSum += i * hist[i] fgCount += hist[i] } } // 计算背景和前景的平均灰度值 bgMean := bgSum / bgCount fgMean := fgSum / fgCount // 根据背景和前景的平均灰度值计算阈值 return uint8((bgMean + fgMean) / 2) } // 计算直方图 func histogram(img image.Image) []int { bounds := img.Bounds() w, h := bounds.Max.X, bounds.Max.Y hist := make([]int, 256) for y := 0; y < h; y++ { for x := 0; x < w; x++ { r, _, _, _ := img.At(x, y).RGBA() gray := color.Gray{uint8(r / 256)} hist[gray.Y]++ } } return hist }
在上述代码中,我们首先通过image
包的Decode
函数将输入图像文件解码为image.Image
类型的对象。然后,我们调用calculateThreshold
函数计算图像的全局阈值。最后,我们根据全局阈值将图像进行二值化处理,并使用jpeg
包的Encode
전역 임계값은 간단하지만 효과적인 이미지 이진화 방법입니다. 이는 이미지의 픽셀 값을 겹치지 않는 두 개의 부드러운 영역으로 나누어 각각 대상 개체와 배경을 나타냅니다. 이 방법은 일반적으로 전경과 배경의 차이가 뚜렷한 이미지에 적용됩니다.
image
패키지의 Decode
함수를 전달합니다. 이미지 파일을 image.Image
유형의 객체에 입력합니다. 그런 다음 calculateThreshold
함수를 호출하여 이미지의 전역 임계값을 계산합니다. 마지막으로 전역 임계값에 따라 이미지를 이진화하고 jpeg
패키지의 Encode
기능을 사용하여 처리된 이미지를 파일에 저장합니다. 🎜🎜요약: 🎜이 기사에서는 Golang을 사용하여 이미지에 대한 히스토그램 균등화 및 전역 임계값 연산을 수행하는 방법을 소개했습니다. 히스토그램 균등화를 사용하면 이미지의 대비를 개선하여 이미지를 더 명확하고 뚜렷하게 만들 수 있습니다. 전역 임계값을 사용하면 이미지를 이진 이미지로 변환하여 이미지의 대상 개체를 강조할 수 있습니다. 이 두 가지 방법을 유연하게 사용함으로써 다양한 애플리케이션 요구 사항을 충족하는 이미지 향상 및 특징 추출을 달성할 수 있습니다. 실제 응용 분야에서는 다른 이미지 처리 알고리즘을 결합하여 이미지 처리의 효과와 품질을 더욱 향상시킬 수 있습니다. 🎜위 내용은 Golang 이미지 조작: 히스토그램 평준화 및 이미지의 전역 임계값 지정을 수행하는 방법 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Golang 이미지 조작: 이미지를 미러링, 회전 및 뒤집는 방법 1. 소개 이미지 처리는 많은 개발 시나리오에서 자주 접하게 되는 요구 사항 중 하나입니다. Golang에서는 이미지 패키지를 사용하여 이미지를 조작하고 처리할 수 있습니다. 이 기사에서는 Golang을 사용하여 이미지를 미러링, 회전 및 뒤집는 방법에 중점을 두고 해당 코드 예제를 제공합니다. 2. 미러링 작업 사진을 미러링하는 것은 사진의 왼쪽과 오른쪽 레이아웃을 변경하는 것입니다. Golang에서는 draw 패키지의 Fli를 사용할 수 있습니다.

Golang이 AI 개발에 적합한 이유는 무엇입니까? 인공지능(AI) 기술의 급속한 발전으로 AI 분야에서 Golang 프로그래밍 언어의 활용 가능성에 주목하는 개발자와 연구자가 점점 더 많아지고 있습니다. Golang(Go라고도 함)은 Google에서 개발한 오픈 소스 프로그래밍 언어로, 고성능, 높은 동시성, 단순성 및 사용 편의성으로 인해 개발자들에게 사랑받고 있습니다. 이 기사에서는 Golang이 AI 개발에 적합한 이유를 살펴보고 AI 분야에서 Golang의 장점을 보여주는 몇 가지 샘플 코드를 제공합니다. 하이섹스

PHP 이미지 작업: 이미지의 크기와 파일 크기를 얻는 방법 웹사이트나 애플리케이션을 개발할 때 이미지를 처리해야 하는 경우가 많습니다. 이미지의 크기와 파일 크기를 얻는 것은 일반적인 요구 사항이며, 이는 PHP의 일부 기능을 통해 쉽게 얻을 수 있습니다. 이 기사에서는 PHP를 사용하여 이미지의 크기와 파일 크기를 얻는 방법을 소개하고 코드 예제를 첨부합니다. 이미지 크기 얻기 이미지 크기를 얻으려면 PHP 내장 함수 getimagesize()를 사용할 수 있습니다. 이 함수는 이미지 크기가 포함된 파일을 반환합니다.

Golang 개발: 분산 파일 저장 시스템 구축 최근 몇 년간 클라우드 컴퓨팅과 빅데이터의 급속한 발전으로 인해 데이터 저장에 대한 수요가 지속적으로 증가하고 있습니다. 이러한 추세에 대응하기 위해 분산형 파일 저장 시스템이 중요한 기술 방향이 되었습니다. 이 기사에서는 Golang 프로그래밍 언어를 사용하여 분산 파일 저장 시스템을 구축하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 분산 파일 저장 시스템의 설계 분산 파일 저장 시스템은 파일 데이터를 여러 머신에 분산하여 저장하는 시스템입니다. 데이터를 여러 블록으로 나누어서 저장합니다.

Golang 이미지 작업: 이미지에서 색상 균형 및 색상 변환을 수행하는 방법 소개: 이미지 처리 분야에서 색상 균형 및 색상 변환은 일반적으로 사용되는 작업 중 하나입니다. 이 기사에서는 Go 언어를 사용하여 그림의 색상 균형 및 색상 변환을 수행하는 방법을 소개하고 해당 코드 예제를 제공합니다. 1. 색상 균형 색상 균형이란 이미지의 각 색상 채널의 강도를 조정하여 이미지의 전체 색상을 보다 균일하고 자연스럽게 만드는 것을 말합니다. 일반적으로 사용되는 색상 균형 알고리즘에는 밝기 균형, 화이트 밸런스 및 히스토그램 균등화가 포함됩니다. 밝기 균형밝기 균형은 그래프를 조정하여 달성됩니다.

Golang 동시 프로그래밍 실습에서 Goroutine의 응용 시나리오 분석 소개: 컴퓨터 성능이 지속적으로 향상됨에 따라 멀티 코어 프로세서의 장점을 최대한 활용하려면 동시 사용이 필요합니다. 멀티 스레드 작업을 구현하는 프로그래밍 기술입니다. Go 언어에서 고루틴(코루틴)은 효율적인 동시 작업을 달성하는 데 사용할 수 있는 매우 강력한 동시 프로그래밍 메커니즘입니다. 이 기사에서는 고루틴의 애플리케이션 시나리오를 살펴보고 몇 가지 예를 제공합니다.

Golang 이미지 조작: 이미지에서 그라디언트 및 텍스처 매핑을 수행하는 방법 개요: 이미지 처리에서 그라디언트 및 텍스처 매핑은 일반적으로 사용되는 두 가지 기술입니다. 그라데이션은 색상 효과의 부드러운 전환을 만들 수 있는 반면 텍스처 매핑은 텍스처 이미지를 대상 이미지에 매핑할 수 있습니다. 이 기사에서는 Golang 프로그래밍 언어를 사용하여 이미지에 대한 그라데이션 및 텍스처 매핑 작업을 수행하는 방법을 소개합니다. 이미지 그라데이션 먼저 Golang의 이미지 처리 패키지 이미지와 이미지/색상을 가져와야 합니다. 다음은 다음에 의해 생성된 샘플 코드입니다.

Golang 및 RabbitMQ를 사용하여 분산 로그 수집 및 분석을 구현하기 위한 세부 정보, 기술 및 모범 사례 최근 마이크로서비스 아키텍처의 인기와 대규모 시스템의 복잡성으로 인해 로그 수집 및 분석이 점점 더 중요해지고 있습니다. 분산 시스템에서는 각 마이크로서비스의 로그가 서로 다른 위치에 흩어져 있는 경우가 많습니다. 이러한 로그를 어떻게 효율적으로 수집하고 분석할지가 문제가 됩니다. 이 기사에서는 Golang 및 RabbitMQ를 사용하여 분산 로그 수집 및 분석을 구현하는 방법에 대한 세부 정보, 기술 및 모범 사례를 소개합니다. 라
