图片灰度和二值化处理
May 23, 2016 pm 04:39 PM图片灰度和二值化处理
<?php function adaptiveThreshold($file){ if(!$ex = getimagesize($file)){ return false; } // 打开图片 switch($ex[2]){ case IMAGETYPE_JPEG: case IMAGETYPE_JPEG2000: if(!$im = imageCreateFromJpeg($file)){ return false; } break; case IMAGETYPE_PNG: $im = imageCreateFromPng($file); break; case IMAGETYPE_GIF: $im = imageCreateFromGif($file); break; case IMAGETYPE_BMP: $im = imageCreateFromBmp($file); break; default : return false; } $gray = array_fill(0, $ex[1], array_fill(0, $ex[0], 0) ); // 转为灰阶图像 foreach($gray as $y => &$row){ foreach($row as $x => &$Y){ $rgb = imagecolorat($im, $x, $y); // 根据颜色求亮度 $B = $rgb & 255; $G = ($rgb >> 8) & 255; $R = ($rgb >> 16) & 255; $Y = ($R * 19595 + $G * 38469 + $B * 7472) >> 16; } } unset($row, $Y); // 自动求域值 $back = 127; do{ $crux = $back; $s = $b = $l = $I = 0; foreach($gray as $row){ foreach($row as $Y){ if($Y < $crux){ $s += $Y; $l++; }else{ $b += $Y; $I++; } } } $s = $l ? floor($s / $l) : 0; $b = $I ? floor($b / $I) : 0; $back = ($s + $b) >> 1; }while($crux != $back); // 二值化 $bin = $gray; foreach($bin as &$row){ foreach($row as &$Y){ $Y = $Y < $crux ? 0 : 1; } } return array( $gray, $bin, ); } if(empty($_GET["img"])){ exit("Please use $_SERVER[SCRIPT_NAME]?img=local/image/path"); } if(!$im = adaptiveThreshold($_GET["img"])){ exit("error!"); } $img = imagecreate(count($im[0][0]), count($im[0]) * 2); $rgb = array( imagecolorallocate($img, 0, 0, 0), imagecolorallocate($img, 255, 255, 255), ); $x = $y = 0; $colors = array( 0 => $rgb[0], 255 => $rgb[1] ); foreach($im[0] as $row){ do{ if(isset($colors[$row[$x]])){ $c = $colors[$row[$x]]; }else{ $c = $colors[$row[$x]] = imagecolorallocate($img, $row[$x], $row[$x], $row[$x]); } // imagesetpixel($img, $x, $y, $rgb[$row[$x] < 128 ? 0 : 1]); imagesetpixel($img, $x, $y, $c); }while(isset($row[++$x])); $x = 0; $y++; } foreach($im[1] as $row){ do{ imagesetpixel($img, $x, $y, $rgb[$row[$x]]); }while(isset($row[++$x])); $x = 0; $y++; } header("Content-Type: image/gif"); imagegif($img);
로그인 후 복사
以上就是图片灰度和二值化处理的内容,更多相关内容请关注PHP中文网(www.php.cn)!
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 기사 태그

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

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

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

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

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

뜨거운 주제
Gmail 이메일의 로그인 입구는 어디에 있나요?
7287
9


자바 튜토리얼
1622
14


Cakephp 튜토리얼
1342
46


라라벨 튜토리얼
1259
25


PHP 튜토리얼
1206
29

