commit
84db6cfc94
10 changed files with 335 additions and 0 deletions
-
BIN.DS_Store
-
6.idea/inspectionProfiles/profiles_settings.xml
-
4.idea/misc.xml
-
217.idea/workspace.xml
-
108app.py
-
BINimg/.DS_Store
-
BINimg/1.pic.jpg
-
BINimg/2.pic.jpg
-
BINimg/a.png
-
BINimg/lie.jpg
@ -0,0 +1,6 @@ |
|||
<component name="InspectionProjectProfileManager"> |
|||
<settings> |
|||
<option name="USE_PROJECT_PROFILE" value="false" /> |
|||
<version value="1.0" /> |
|||
</settings> |
|||
</component> |
@ -0,0 +1,4 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="ProjectRootManager" version="2" project-jdk-name="$USER_HOME$/anaconda3 (2)" project-jdk-type="Python SDK" /> |
|||
</project> |
@ -0,0 +1,217 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="AutoImportSettings"> |
|||
<option name="autoReloadType" value="SELECTIVE" /> |
|||
</component> |
|||
<component name="ChangeListManager"> |
|||
<list default="true" id="89e8558a-64c4-41a4-8fb7-95d18b1c5bb8" name="Changes" comment="" /> |
|||
<option name="SHOW_DIALOG" value="false" /> |
|||
<option name="HIGHLIGHT_CONFLICTS" value="true" /> |
|||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> |
|||
<option name="LAST_RESOLUTION" value="IGNORE" /> |
|||
</component> |
|||
<component name="FlaskConsoleOptions" custom-start-script="import sys sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS]) from flask.cli import ScriptInfo locals().update(ScriptInfo(create_app=None).load_app().make_shell_context()) print("Python %s on %s\nApp: %s [%s]\nInstance: %s" % (sys.version, sys.platform, app.import_name, app.env, app.instance_path))"> |
|||
<envs> |
|||
<env key="FLASK_APP" value="app" /> |
|||
</envs> |
|||
<option name="myCustomStartScript" value="import sys sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS]) from flask.cli import ScriptInfo locals().update(ScriptInfo(create_app=None).load_app().make_shell_context()) print("Python %s on %s\nApp: %s [%s]\nInstance: %s" % (sys.version, sys.platform, app.import_name, app.env, app.instance_path))" /> |
|||
<option name="myEnvs"> |
|||
<map> |
|||
<entry key="FLASK_APP" value="app" /> |
|||
</map> |
|||
</option> |
|||
</component> |
|||
<component name="ProjectId" id="2Sj1dGp6OZglii4ep4rXpDFntQl" /> |
|||
<component name="ProjectViewState"> |
|||
<option name="hideEmptyMiddlePackages" value="true" /> |
|||
<option name="showLibraryContents" value="true" /> |
|||
</component> |
|||
<component name="PropertiesComponent"><![CDATA[{ |
|||
"keyToString": { |
|||
"RunOnceActivity.ShowReadmeOnStart": "true", |
|||
"WebServerToolWindowFactoryState": "false", |
|||
"node.js.detected.package.eslint": "true", |
|||
"node.js.detected.package.tslint": "true", |
|||
"node.js.selected.package.eslint": "(autodetect)", |
|||
"node.js.selected.package.tslint": "(autodetect)", |
|||
"settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable", |
|||
"vue.rearranger.settings.migration": "true" |
|||
} |
|||
}]]></component> |
|||
<component name="RecentsManager"> |
|||
<key name="MoveFile.RECENT_KEYS"> |
|||
<recent name="$PROJECT_DIR$/template" /> |
|||
</key> |
|||
</component> |
|||
<component name="RunManager" selected="Python.app"> |
|||
<configuration name="app" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> |
|||
<module name="opencv" /> |
|||
<option name="INTERPRETER_OPTIONS" value="" /> |
|||
<option name="PARENT_ENVS" value="true" /> |
|||
<envs> |
|||
<env name="PYTHONUNBUFFERED" value="1" /> |
|||
</envs> |
|||
<option name="SDK_HOME" value="" /> |
|||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> |
|||
<option name="IS_MODULE_SDK" value="true" /> |
|||
<option name="ADD_CONTENT_ROOTS" value="true" /> |
|||
<option name="ADD_SOURCE_ROOTS" value="true" /> |
|||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> |
|||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app.py" /> |
|||
<option name="PARAMETERS" value="" /> |
|||
<option name="SHOW_COMMAND_LINE" value="false" /> |
|||
<option name="EMULATE_TERMINAL" value="false" /> |
|||
<option name="MODULE_MODE" value="false" /> |
|||
<option name="REDIRECT_INPUT" value="false" /> |
|||
<option name="INPUT_FILE" value="" /> |
|||
<method v="2" /> |
|||
</configuration> |
|||
<configuration name="color" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> |
|||
<module name="opencv" /> |
|||
<option name="INTERPRETER_OPTIONS" value="" /> |
|||
<option name="PARENT_ENVS" value="true" /> |
|||
<envs> |
|||
<env name="PYTHONUNBUFFERED" value="1" /> |
|||
</envs> |
|||
<option name="SDK_HOME" value="" /> |
|||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> |
|||
<option name="IS_MODULE_SDK" value="true" /> |
|||
<option name="ADD_CONTENT_ROOTS" value="true" /> |
|||
<option name="ADD_SOURCE_ROOTS" value="true" /> |
|||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> |
|||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/color.py" /> |
|||
<option name="PARAMETERS" value="" /> |
|||
<option name="SHOW_COMMAND_LINE" value="false" /> |
|||
<option name="EMULATE_TERMINAL" value="false" /> |
|||
<option name="MODULE_MODE" value="false" /> |
|||
<option name="REDIRECT_INPUT" value="false" /> |
|||
<option name="INPUT_FILE" value="" /> |
|||
<method v="2" /> |
|||
</configuration> |
|||
<configuration name="main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true"> |
|||
<module name="opencv" /> |
|||
<option name="INTERPRETER_OPTIONS" value="" /> |
|||
<option name="PARENT_ENVS" value="true" /> |
|||
<envs> |
|||
<env name="PYTHONUNBUFFERED" value="1" /> |
|||
</envs> |
|||
<option name="SDK_HOME" value="" /> |
|||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> |
|||
<option name="IS_MODULE_SDK" value="true" /> |
|||
<option name="ADD_CONTENT_ROOTS" value="true" /> |
|||
<option name="ADD_SOURCE_ROOTS" value="true" /> |
|||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> |
|||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/main.py" /> |
|||
<option name="PARAMETERS" value="" /> |
|||
<option name="SHOW_COMMAND_LINE" value="false" /> |
|||
<option name="EMULATE_TERMINAL" value="false" /> |
|||
<option name="MODULE_MODE" value="false" /> |
|||
<option name="REDIRECT_INPUT" value="false" /> |
|||
<option name="INPUT_FILE" value="" /> |
|||
<method v="2" /> |
|||
</configuration> |
|||
<configuration name="temp" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> |
|||
<module name="opencv" /> |
|||
<option name="INTERPRETER_OPTIONS" value="" /> |
|||
<option name="PARENT_ENVS" value="true" /> |
|||
<envs> |
|||
<env name="PYTHONUNBUFFERED" value="1" /> |
|||
</envs> |
|||
<option name="SDK_HOME" value="" /> |
|||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> |
|||
<option name="IS_MODULE_SDK" value="true" /> |
|||
<option name="ADD_CONTENT_ROOTS" value="true" /> |
|||
<option name="ADD_SOURCE_ROOTS" value="true" /> |
|||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> |
|||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/temp.py" /> |
|||
<option name="PARAMETERS" value="" /> |
|||
<option name="SHOW_COMMAND_LINE" value="false" /> |
|||
<option name="EMULATE_TERMINAL" value="false" /> |
|||
<option name="MODULE_MODE" value="false" /> |
|||
<option name="REDIRECT_INPUT" value="false" /> |
|||
<option name="INPUT_FILE" value="" /> |
|||
<method v="2" /> |
|||
</configuration> |
|||
<configuration name="test" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> |
|||
<module name="opencv" /> |
|||
<option name="INTERPRETER_OPTIONS" value="" /> |
|||
<option name="PARENT_ENVS" value="true" /> |
|||
<envs> |
|||
<env name="PYTHONUNBUFFERED" value="1" /> |
|||
</envs> |
|||
<option name="SDK_HOME" value="" /> |
|||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> |
|||
<option name="IS_MODULE_SDK" value="true" /> |
|||
<option name="ADD_CONTENT_ROOTS" value="true" /> |
|||
<option name="ADD_SOURCE_ROOTS" value="true" /> |
|||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> |
|||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/test.py" /> |
|||
<option name="PARAMETERS" value="" /> |
|||
<option name="SHOW_COMMAND_LINE" value="false" /> |
|||
<option name="EMULATE_TERMINAL" value="false" /> |
|||
<option name="MODULE_MODE" value="false" /> |
|||
<option name="REDIRECT_INPUT" value="false" /> |
|||
<option name="INPUT_FILE" value="" /> |
|||
<method v="2" /> |
|||
</configuration> |
|||
<configuration name="transform" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> |
|||
<module name="opencv" /> |
|||
<option name="INTERPRETER_OPTIONS" value="" /> |
|||
<option name="PARENT_ENVS" value="true" /> |
|||
<envs> |
|||
<env name="PYTHONUNBUFFERED" value="1" /> |
|||
</envs> |
|||
<option name="SDK_HOME" value="" /> |
|||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> |
|||
<option name="IS_MODULE_SDK" value="true" /> |
|||
<option name="ADD_CONTENT_ROOTS" value="true" /> |
|||
<option name="ADD_SOURCE_ROOTS" value="true" /> |
|||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> |
|||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/transform.py" /> |
|||
<option name="PARAMETERS" value="" /> |
|||
<option name="SHOW_COMMAND_LINE" value="false" /> |
|||
<option name="EMULATE_TERMINAL" value="false" /> |
|||
<option name="MODULE_MODE" value="false" /> |
|||
<option name="REDIRECT_INPUT" value="false" /> |
|||
<option name="INPUT_FILE" value="" /> |
|||
<method v="2" /> |
|||
</configuration> |
|||
<recent_temporary> |
|||
<list> |
|||
<item itemvalue="Python.app" /> |
|||
<item itemvalue="Python.test" /> |
|||
<item itemvalue="Python.temp" /> |
|||
<item itemvalue="Python.color" /> |
|||
<item itemvalue="Python.transform" /> |
|||
</list> |
|||
</recent_temporary> |
|||
</component> |
|||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> |
|||
<component name="TaskManager"> |
|||
<task active="true" id="Default" summary="Default task"> |
|||
<changelist id="89e8558a-64c4-41a4-8fb7-95d18b1c5bb8" name="Changes" comment="" /> |
|||
<created>1689645263707</created> |
|||
<option name="number" value="Default" /> |
|||
<option name="presentableId" value="Default" /> |
|||
<updated>1689645263707</updated> |
|||
<workItem from="1689645275071" duration="259000" /> |
|||
<workItem from="1689646243955" duration="50254000" /> |
|||
</task> |
|||
<servers /> |
|||
</component> |
|||
<component name="TypeScriptGeneratedFilesManager"> |
|||
<option name="version" value="3" /> |
|||
</component> |
|||
<component name="com.intellij.coverage.CoverageDataManagerImpl"> |
|||
<SUITE FILE_PATH="coverage/opencv$hello_opencv.coverage" NAME="hello_opencv Coverage Results" MODIFIED="1689645383118" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
<SUITE FILE_PATH="coverage/opencv$threshold.coverage" NAME="threshold Coverage Results" MODIFIED="1689749307625" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
<SUITE FILE_PATH="coverage/opencv$temp.coverage" NAME="temp Coverage Results" MODIFIED="1689835956021" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
<SUITE FILE_PATH="coverage/opencv$test.coverage" NAME="test Coverage Results" MODIFIED="1689841734801" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
<SUITE FILE_PATH="coverage/opencv$main.coverage" NAME="main Coverage Results" MODIFIED="1689730812259" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
<SUITE FILE_PATH="coverage/opencv$app.coverage" NAME="app Coverage Results" MODIFIED="1689848027328" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
<SUITE FILE_PATH="coverage/opencv$color.coverage" NAME="color Coverage Results" MODIFIED="1689835570756" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
<SUITE FILE_PATH="coverage/opencv$sift.coverage" NAME="sift Coverage Results" MODIFIED="1689729874855" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
<SUITE FILE_PATH="coverage/opencv$lie.coverage" NAME="lie Coverage Results" MODIFIED="1689758832253" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
<SUITE FILE_PATH="coverage/opencv$transform.coverage" NAME="transform Coverage Results" MODIFIED="1689834348789" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> |
|||
</component> |
|||
</project> |
@ -0,0 +1,108 @@ |
|||
# coding=utf-8 |
|||
import cv2 |
|||
import numpy as np |
|||
import math |
|||
|
|||
# 修改图像的对比度,coefficent>0, <1降低对比度,>1提升对比度 建议0-2 |
|||
def change_contrast(img, coefficent): |
|||
imggray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
|||
m = cv2.mean(img)[0] |
|||
graynew = m + coefficent * (imggray - m) |
|||
img1 = np.zeros(img.shape, np.float32) |
|||
k = np.divide(graynew, imggray, out=np.zeros_like(graynew), where=imggray != 0) |
|||
img1[:, :, 0] = img[:, :, 0] * k |
|||
img1[:, :, 1] = img[:, :, 1] * k |
|||
img1[:, :, 2] = img[:, :, 2] * k |
|||
img1[img1 > 255] = 255 |
|||
img1[img1 < 0] = 0 |
|||
return img1.astype(np.uint8) |
|||
|
|||
# 修改图像的亮度,brightness取值0~2 <1表示变暗 >1表示变亮 |
|||
def change_brightness(img, brightness): |
|||
[averB, averG, averR] = np.array(cv2.mean(img))[:-1] / 3 |
|||
k = np.ones((img.shape)) |
|||
k[:, :, 0] *= averB |
|||
k[:, :, 1] *= averG |
|||
k[:, :, 2] *= averR |
|||
img = img + (brightness - 1) * k |
|||
img[img > 255] = 255 |
|||
img[img < 0] = 0 |
|||
return img.astype(np.uint8) |
|||
|
|||
# 对图像二值化并取中值滤波 |
|||
def threshold_img(image): |
|||
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
|||
retval, dst = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) |
|||
img_median = cv2.medianBlur(dst, 3) |
|||
return img_median |
|||
|
|||
# 腐蚀图像 |
|||
def corrosion_img(image): |
|||
# 腐蚀操作会把裂痕也消除 |
|||
kernel = np.ones((9, 9), dtype=np.uint8) |
|||
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel, 1) |
|||
return opening |
|||
|
|||
# 找出最右侧的近似竖直直线 通过直线与水平的角度判断是否倾斜 大于容错率的竖直 小于容错率的倾斜 |
|||
def lines_img(image): |
|||
slopes = [] |
|||
yErrorRange = 3 |
|||
xErrorRange = 3 |
|||
minLength = 20 |
|||
# 创建一个LSD对象 |
|||
lsd = cv2.createLineSegmentDetector(0) |
|||
# 执行检测结果 |
|||
dlines = lsd.detect(image) |
|||
# 绘制检测结果 |
|||
for dline in dlines[0]: |
|||
x0 = int(round(dline[0][0])) |
|||
y0 = int(round(dline[0][1])) |
|||
x1 = int(round(dline[0][2])) |
|||
y1 = int(round(dline[0][3])) |
|||
length = math.hypot(x1 - x0, y1 - y0) |
|||
if (x0 > 605 and x1 > 605): |
|||
# print((x0, y0), (x1, y1)) |
|||
# 需要根据角坐标排除 横向线,针对纵向线判断是否有倾斜 |
|||
# 过滤横线 |
|||
if not (abs(x1 - x0) > xErrorRange and abs(y1 - y0) < yErrorRange): |
|||
# 过滤线段长度 |
|||
if not (length < minLength): |
|||
if x1 - x0 != 0: |
|||
k = abs(y1 - y0) / abs(x1 - x0) |
|||
angle = math.atan(k) * 180 / math.pi |
|||
slopes.append(angle) |
|||
print(angle) |
|||
# cv2.line(img0, (x0, y0), (x1,y1), (0,255,0), 1, cv2.LINE_AA) |
|||
# 有小于85度的就证明胶带倾斜了 |
|||
threshold = 85 |
|||
res = any(x < threshold for x in slopes) |
|||
if res: |
|||
print("胶带倾斜") |
|||
else: |
|||
print("胶带正确") |
|||
|
|||
|
|||
def detectionImg(): |
|||
# 读取输入图片 |
|||
img = cv2.imread("img/a.png") |
|||
l = 0 |
|||
c = 34 |
|||
# 亮度 -1~1 |
|||
imgBrightness = change_brightness(img, float(l - 50) / float(50)) |
|||
# 对比度 0~2 |
|||
img0 = change_contrast(imgBrightness, c / 50) |
|||
thresholdImg = threshold_img(img0) |
|||
corrosionImg = corrosion_img(thresholdImg) |
|||
lines_img(corrosionImg) |
|||
# 显示并保存结果 |
|||
cv2.imshow("gray", corrosionImg) |
|||
cv2.imshow("lines", img0) |
|||
cv2.waitKey(0) |
|||
cv2.destroyAllWindows() |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
detectionImg() |
|||
|
|||
|
|||
|
After Width: 1276 | Height: 1702 | Size: 352 KiB |
After Width: 1276 | Height: 1702 | Size: 323 KiB |
After Width: 632 | Height: 1266 | Size: 1.4 MiB |
After Width: 736 | Height: 1952 | Size: 343 KiB |
Write
Preview
Loading…
Cancel
Save
Reference in new issue