求助:图片切边问题

测试脚本如下,只测试过 “心赋注·嘉兴藏·日本东京大学”的图片。而且需要预处理。预处理和脚本运行效果在@140494有图示。 脚本粗陋,而且速度极慢,只是上面提到的图像识别板框思路的测试,希望可以抛砖引玉。

脚本不能直接运行,仅供参考;如果自行运行出现问题,本人概不负责。

@echo off setLocal EnableExtensions EnableDelayedExpansion

rem =============== 可以修改部分 开始=========== rem 左右留边宽度:left 110, right 110 set /A SAVE_X=110 set IMAGES=*.jpg rem 输出目录 set OUT=切边 set COMPARE_FILE=20x200.png set FILE=result.txt rem =============== 可以修改部分 结束===========

powercfg.exe /hibernate off set /A Counter=1 echo "出错文件:!OUT!\result.txt" echo "左右留边宽度=%SAVE_X%" echo. > !OUT!\result.txt

for %%J in ("%IMAGES%") do ( set file=%%~J set /A X_L=0 set /A X_R=0 echo !Counter!=!file! rem if !Counter! LSS 1000 CALL :CutImageEdge !file! set /A Counter+=1 ) endLocal powercfg.exe /hibernate on Exit /B Pause&Exit

:CutImageEdge SET file=%~1

rem ------------ 找右边坐标 ------------------取样范围:NorthEast 300x1000+100+0 rem for /F "tokens=2 delims=@" %%A in ( 'magick !file! -gravity East -crop 300x1000+100+0 +repage miff:- ^| compare -quiet -metric RMSE -subimage-search miff:- %COMPARE_FILE% null: 2^>^&1' ) do ( for /F "tokens=2 delims=@" %%A in ( 'magick !file! -gravity NorthEast -crop 300x1000+100+0 +repage miff:- ^| compare -quiet -metric RMSE -subimage-search miff:- %COMPARE_FILE% null: 2^>^&1' ) do ( echo 右版框 OFFSET=%%A & :: 如果出错,出错信息为 error/compare.c/CompareImagesCommand/1174 CALL :GET_OFFSET "%%A",X_R ) IF %ERRORLEVEL% LSS 0 Exit /B %ERRORLEVEL%

rem 计算右边坐标 @210,66 : (300+100=比较的取样图的宽度)- (@210+20=132 黑框右边界) - 留边110 = 留边切 160(不留边切 260 ) set /A X_R=(300+100)-(!X_R!+20)

rem ------------ 找左边坐标 ------------------取样范围:300x1000+100+0 for /F "tokens=2 delims=@" %%A in ( 'magick compare -quiet !file![300x1000+100+0] %COMPARE_FILE% -metric RMSE -dissimilarity-threshold 1 -subimage-search NULL: 2^>^&1' ) do ( echo 左边栏 OFFSET=%%A CALL :GET_OFFSET "%%A",X_L ) IF %ERRORLEVEL% LSS 0 Exit /B %ERRORLEVEL%

rem 减去保留边宽 set /A X_L-=!SAVE_X! set /A X_R-=!SAVE_X! echo L,R=!X_L!,!X_R! set LEFT_CHOP= set RIGHT_CHOP=

if !X_L! LEQ 0 IF !X_R! LEQ 0 ( echo %file% 无需处理 >> !OUT!/result.txt Exit /B -1 )

if !X_L! GTR 0 set LEFT_CHOP=-chop !X_L!x0 +repage if %X_R% GTR 0 set RIGHT_CHOP=-gravity East -chop !X_R!x0 +repage echo "magick !file! !LEFT_CHOP! !RIGHT_CHOP! !OUT!\!file!" magick !file! !LEFT_CHOP! !RIGHT_CHOP! !OUT!\!file!

EXIT /B 0

:GET_OFFSET SET MSG=%~1 if NOT "!MSG!"=="!MSG:error=!" ( echo %file% 无法处理 >> !OUT!/result.txt Exit /B -1 ) for /F "tokens=1 delims=," %%B in ("!MSG!") do ( set OFF_X=%%B set /A OFF_X=!OFF_X: =! ) set /A %~2=%OFF_X% Exit /B 0

Copyright © 2088 02年世界杯中国队_1930年乌拉圭世界杯 - n360l.com All Rights Reserved.
友情链接