ਪਾਈਥਨ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ: ਓਪਨਸੀਵੀ ਡਾਇਲੇਸ਼ਨ ਮੁੱਦਿਆਂ ਦਾ ਨਿਪਟਾਰਾ ਕਰਨਾ
ਪਾਈਥਨ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਕਾਰਜਾਂ ਵਿੱਚ, ਓਪਨਸੀਵੀ ਉਪਲਬਧ ਸਭ ਤੋਂ ਸ਼ਕਤੀਸ਼ਾਲੀ ਲਾਇਬ੍ਰੇਰੀਆਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ। ਹਾਲਾਂਕਿ, ਰੂਪ ਵਿਗਿਆਨਿਕ ਕਾਰਜਾਂ ਵਰਗੇ ਗੁੰਝਲਦਾਰ ਫੰਕਸ਼ਨਾਂ ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ, ਕਈ ਵਾਰ ਗਲਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ, ਜਿਵੇਂ ਕਿ cv2.error ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਤੁਹਾਨੂੰ ਸਾਹਮਣਾ ਕਰਨਾ ਪੈ ਸਕਦਾ ਹੈ ਫੈਲਾਓ() ਫੰਕਸ਼ਨ. ਇੱਕ ਆਮ ਦ੍ਰਿਸ਼ ਬੈਕਟੀਰੀਆ ਕਾਲੋਨੀ ਕਾਉਂਟਿੰਗ ਵਰਗੇ ਕੰਮਾਂ ਲਈ OpenCV ਦੀ ਵਰਤੋਂ ਕਰ ਰਿਹਾ ਹੈ।
ਹਾਲ ਹੀ ਵਿੱਚ, ਪਾਈਥਨ 3.11.8 ਅਤੇ ਓਪਨਸੀਵੀ 4.10.0 ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਇੱਕ ਬੈਕਟੀਰੀਆ ਕਾਲੋਨੀ ਕਾਊਂਟਿੰਗ ਐਪਲੀਕੇਸ਼ਨ ਵਿਕਸਿਤ ਕਰਦੇ ਹੋਏ, ਏ. ਫੈਲਾਅ ਗਲਤੀ ਆਈ. ਇਹ ਮੁੱਦਾ ਇੱਕ PyQt5 GUI ਵਾਤਾਵਰਣ ਵਿੱਚ ਪ੍ਰਗਟ ਹੋਇਆ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਵਾਟਰਸ਼ੈੱਡ ਐਲਗੋਰਿਦਮ ਭਾਗ ਵਿੱਚ, ਜਿੱਥੇ ਚਿੱਤਰ ਬਾਰਡਰ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ। ਸਮੱਸਿਆ OpenCV's ਨੂੰ ਪਾਸ ਕੀਤੇ ਜਾ ਰਹੇ ਇੱਕ ਗਲਤ ਡੇਟਾ ਕਿਸਮ ਤੋਂ ਪੈਦਾ ਹੁੰਦੀ ਹੈ cv2.dilate() ਫੰਕਸ਼ਨ.
ਇਹ ਗਲਤੀ ਪਰੇਸ਼ਾਨ ਕਰਨ ਵਾਲੀ ਹੈ ਕਿਉਂਕਿ ਇਹੀ ਕੋਡ ਓਪਨਸੀਵੀ ਵਿੰਡੋਜ਼ ਵਿੱਚ, PyQt5 ਵਾਤਾਵਰਣ ਤੋਂ ਬਾਹਰ ਟੈਸਟ ਕੀਤੇ ਜਾਣ 'ਤੇ ਵਧੀਆ ਕੰਮ ਕਰਦਾ ਹੈ। ਇਹ ਇਸ ਬਾਰੇ ਸਵਾਲ ਉਠਾਉਂਦਾ ਹੈ ਕਿ ਕਿਵੇਂ ਓਪਨਸੀਵੀ ਫੰਕਸ਼ਨ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਵਾਤਾਵਰਨ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਕਿ ਕਿਵੇਂ ਵੱਖਰਾ ਵਿਵਹਾਰ ਕਰਦੇ ਹਨ ਅਤੇ ਅਜਿਹੀਆਂ ਅੰਤਰਾਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਣਾ ਹੈ। ਇਹ ਗ੍ਰਾਫਿਕਲ ਯੂਜ਼ਰ ਇੰਟਰਫੇਸ ਦੇ ਅੰਦਰ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਨੂੰ ਲਾਗੂ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੇ ਡਿਵੈਲਪਰਾਂ ਲਈ ਨਿਰਾਸ਼ਾਜਨਕ ਹੋ ਸਕਦਾ ਹੈ।
ਇਸ ਲੇਖ ਵਿਚ, ਅਸੀਂ ਇਸ ਦੇ ਮੂਲ ਕਾਰਨ ਦੀ ਪੜਚੋਲ ਕਰਾਂਗੇ cv2.error: (-5: ਮਾੜੀ ਦਲੀਲ) OpenCV ਵਿੱਚ, ਸੰਭਾਵੀ ਹੱਲਾਂ ਦੀ ਪਛਾਣ ਕਰੋ, ਅਤੇ ਮੁੱਦੇ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਵਿਹਾਰਕ ਤਰੀਕੇ ਪੇਸ਼ ਕਰੋ। ਇਸ ਤੋਂ ਇਲਾਵਾ, ਅਸੀਂ ਪਾਈਥਨ ਵਿੱਚ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਲਾਇਬ੍ਰੇਰੀਆਂ ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ ਆਮ ਡੀਬੱਗਿੰਗ ਰਣਨੀਤੀਆਂ 'ਤੇ ਚਰਚਾ ਕਰਾਂਗੇ।
ਹੁਕਮ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ |
---|---|
cv2.distanceTransform | ਇਹ ਕਮਾਂਡ ਬਾਈਨਰੀ ਚਿੱਤਰ ਦੇ ਹਰੇਕ ਪਿਕਸਲ ਲਈ ਨਜ਼ਦੀਕੀ ਜ਼ੀਰੋ ਪਿਕਸਲ ਦੀ ਦੂਰੀ ਦੀ ਗਣਨਾ ਕਰਦੀ ਹੈ। ਇਹ ਵੰਡ ਕਾਰਜਾਂ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਵਾਟਰਸ਼ੈੱਡ ਐਲਗੋਰਿਦਮ, ਵਸਤੂਆਂ ਨੂੰ ਉਹਨਾਂ ਦੀ ਨੇੜਤਾ ਦੇ ਅਧਾਰ ਤੇ ਵੱਖਰਾ ਕਰਨ ਲਈ। ਉਦਾਹਰਨ: dist_transform = cv2.distanceTransform(img_bin, cv2.DIST_L2, 5) |
cv2.connectedComponents | ਇਹ ਕਮਾਂਡ ਇੱਕ ਬਾਈਨਰੀ ਚਿੱਤਰ ਵਿੱਚ ਸਾਰੇ ਜੁੜੇ ਹੋਏ ਭਾਗਾਂ ਨੂੰ ਲੇਬਲ ਕਰਦੀ ਹੈ। ਹਰੇਕ ਵਸਤੂ ਲਈ ਵਿਲੱਖਣ ਮਾਰਕਰਾਂ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨਾ ਵਾਟਰਸ਼ੈਡ ਪਰਿਵਰਤਨ ਲਈ ਜ਼ਰੂਰੀ ਹੈ। ਉਦਾਹਰਨ: ਮਾਰਕਰ = cv2.connectedComponents(sure_fg)[1] |
cv2.watershed | ਇੱਕ ਚਿੱਤਰ ਨੂੰ ਵੱਖ-ਵੱਖ ਖੇਤਰਾਂ ਵਿੱਚ ਵੰਡਣ ਲਈ ਵਾਟਰਸ਼ੈੱਡ ਐਲਗੋਰਿਦਮ ਦਾ ਪ੍ਰਦਰਸ਼ਨ ਕਰਦਾ ਹੈ। ਇਹ ਖੇਤਰਾਂ ਦੇ ਵਿਚਕਾਰ ਸੀਮਾਵਾਂ ਦੀ ਨਿਸ਼ਾਨਦੇਹੀ ਕਰਦੇ ਹੋਏ, ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਇੰਪੁੱਟ ਚਿੱਤਰ ਨੂੰ ਬਦਲਦਾ ਹੈ। ਉਦਾਹਰਨ: cv2.watershed(img_ori, ਮਾਰਕਰ) |
np.uint8 | ਇੱਕ ਚਿੱਤਰ ਜਾਂ ਐਰੇ ਨੂੰ 8-ਬਿੱਟ ਅਣ-ਹਸਤਾਖਰਿਤ ਪੂਰਨ ਅੰਕ ਕਿਸਮ ਵਿੱਚ ਬਦਲਦਾ ਹੈ। ਇਹ ਓਪਨਸੀਵੀ ਓਪਰੇਸ਼ਨਾਂ ਲਈ ਜ਼ਰੂਰੀ ਹੈ ਜੋ ਖਾਸ ਡਾਟਾ ਫਾਰਮੈਟਾਂ ਦੀ ਉਮੀਦ ਕਰਦੇ ਹਨ। ਉਦਾਹਰਨ: sure_fg = np.uint8(sure_fg) |
cv2.erode | ਇੱਕ ਚਿੱਤਰ ਵਿੱਚ ਫੋਰਗਰਾਉਂਡ ਵਸਤੂਆਂ ਦੀਆਂ ਸੀਮਾਵਾਂ ਨੂੰ ਘਟਾਉਂਦਾ ਹੈ। ਇਹ ਆਮ ਤੌਰ 'ਤੇ ਸ਼ੋਰ ਨੂੰ ਸਾਫ਼ ਕਰਨ ਜਾਂ ਜੁੜੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਵੱਖ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਉਦਾਹਰਨ: img_erode = cv2.erode(img, kernel, iterations=1) |
cv2.dilate | ਬਾਈਨਰੀ ਚਿੱਤਰ ਵਿੱਚ ਵਸਤੂਆਂ ਦੀਆਂ ਸੀਮਾਵਾਂ ਦਾ ਵਿਸਤਾਰ ਕਰਦਾ ਹੈ। ਇਹ ਅਕਸਰ ਸੁੰਗੜਨ ਵਾਲੇ ਖੇਤਰਾਂ ਨੂੰ ਮੁੜ-ਵਿਸਤਾਰ ਕਰਨ ਲਈ ਕਟੌਤੀ ਤੋਂ ਬਾਅਦ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਉਦਾਹਰਨ: img_dilate = cv2.dilate(img_erode, kernel, iterations=2) |
cv2.threshold | ਇੱਕ ਚਿੱਤਰ ਉੱਤੇ ਇੱਕ ਬਾਈਨਰੀ ਥ੍ਰੈਸ਼ਹੋਲਡ ਲਾਗੂ ਕਰਦਾ ਹੈ, ਇੱਕ ਖਾਸ ਮੁੱਲ ਤੋਂ ਉੱਪਰ ਦੇ ਪਿਕਸਲ ਨੂੰ 255 ਅਤੇ ਹੇਠਾਂ 0 ਵਿੱਚ ਬਦਲਦਾ ਹੈ। ਇਹ ਰੂਪ ਵਿਗਿਆਨਿਕ ਕਾਰਵਾਈਆਂ ਲਈ ਚਿੱਤਰ ਤਿਆਰ ਕਰਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਉਦਾਹਰਨ: _, binary_img = cv2.threshold(ਸਲੇਟੀ, 127, 255, cv2.THRESH_BINARY) |
cv2.imshow | ਇੱਕ ਵਿੰਡੋ ਵਿੱਚ ਇੱਕ ਚਿੱਤਰ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਦਾ ਹੈ. ਇਹ ਅਕਸਰ ਇੱਕ ਚਿੱਤਰ ਦੇ ਵਿਚਕਾਰਲੇ ਪ੍ਰੋਸੈਸਿੰਗ ਪੜਾਵਾਂ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਡੀਬੱਗਿੰਗ ਦੌਰਾਨ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਉਦਾਹਰਨ: cv2.imshow('ਨਤੀਜਾ', ਨਤੀਜਾ) |
ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਵਿੱਚ ਓਪਨਸੀਵੀ ਗਲਤੀਆਂ ਨੂੰ ਸੰਭਾਲਣਾ
ਪਾਈਥਨ ਸਕ੍ਰਿਪਟ ਵਿੱਚ, ਪ੍ਰਾਇਮਰੀ ਮੁੱਦਾ ਦੀ ਵਰਤੋਂ ਕਰਨ ਤੋਂ ਪੈਦਾ ਹੁੰਦਾ ਹੈ cv2.dilate ਫੰਕਸ਼ਨ, ਜੋ ਓਪਨਸੀਵੀ ਦੇ ਰੂਪ ਵਿਗਿਆਨਿਕ ਤਬਦੀਲੀਆਂ ਦਾ ਹਿੱਸਾ ਹੈ। ਇਹ ਫੰਕਸ਼ਨ ਇੱਕ ਬਾਈਨਰੀ ਚਿੱਤਰ ਵਿੱਚ ਵਸਤੂਆਂ ਦੀਆਂ ਸੀਮਾਵਾਂ ਦਾ ਵਿਸਤਾਰ ਕਰਦਾ ਹੈ। ਇਸਨੂੰ ਇਨਪੁਟ ਚਿੱਤਰ ਲਈ ਇੱਕ ਖਾਸ ਫਾਰਮੈਟ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ—ਆਮ ਤੌਰ 'ਤੇ ਇੱਕ NumPy ਐਰੇ। ਪ੍ਰਦਾਨ ਕੀਤੀ ਸਕ੍ਰਿਪਟ ਵਿੱਚ, ਗਲਤੀ ਹੁੰਦੀ ਹੈ ਕਿਉਂਕਿ ਇੰਪੁੱਟ ਨੂੰ ਫੈਲਾਓ ਸਹੀ ਫਾਰਮੈਟ ਵਿੱਚ ਨਹੀਂ ਹੈ, ਜਿਸ ਕਾਰਨ ਪ੍ਰੋਗਰਾਮ "ਬੁਰਾ ਦਲੀਲ" ਗਲਤੀ ਕਰਦਾ ਹੈ। OpenCV ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਵਿੱਚ ਇਹ ਇੱਕ ਆਮ ਸਮੱਸਿਆ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਜਦੋਂ PyQt5 ਅਤੇ ਸਟੈਂਡਰਡ OpenCV ਵਿੰਡੋਜ਼ ਵਰਗੇ ਵਾਤਾਵਰਣਾਂ ਵਿੱਚ ਬਦਲੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।
ਸਕ੍ਰਿਪਟ ਚਿੱਤਰਾਂ ਨੂੰ ਵੰਡਣ ਲਈ ਵਾਟਰਸ਼ੈੱਡ ਐਲਗੋਰਿਦਮ 'ਤੇ ਵੀ ਬਹੁਤ ਜ਼ਿਆਦਾ ਨਿਰਭਰ ਕਰਦੀ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਪੈਟਰੀ ਡਿਸ਼ ਵਿੱਚ ਵਿਅਕਤੀਗਤ ਬੈਕਟੀਰੀਆ ਦੀਆਂ ਕਲੋਨੀਆਂ ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ। ਇਹ ਵਿਧੀ ਚਿੱਤਰ ਨੂੰ ਇੱਕ ਟੌਪੋਗ੍ਰਾਫਿਕ ਨਕਸ਼ੇ ਵਿੱਚ ਬਦਲ ਦਿੰਦੀ ਹੈ, ਜਿੱਥੇ ਉੱਚ-ਤੀਬਰਤਾ ਵਾਲੇ ਖੇਤਰ ਚੋਟੀਆਂ ਹਨ ਅਤੇ ਘੱਟ-ਤੀਬਰਤਾ ਵਾਲੇ ਖੇਤਰ ਘਾਟੀਆਂ ਹਨ। ਦ cv2.distanceTransform ਫੰਕਸ਼ਨ ਇੱਥੇ ਮਹੱਤਵਪੂਰਨ ਹੈ, ਕਿਉਂਕਿ ਇਹ ਹਰੇਕ ਪਿਕਸਲ ਤੋਂ ਨਜ਼ਦੀਕੀ ਸੀਮਾ ਤੱਕ ਦੂਰੀ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ। ਇਹ ਵਾਟਰਸ਼ੈੱਡ ਮਾਰਕਰਾਂ ਦੀ ਪਛਾਣ ਕਰਕੇ ਫੋਰਗਰਾਉਂਡ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਤੋਂ ਵੱਖ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਜੋ ਕਿ ਸੈਗਮੈਂਟੇਸ਼ਨ ਦਾ ਮਾਰਗਦਰਸ਼ਨ ਕਰਦੇ ਹਨ।
ਸਕ੍ਰਿਪਟ ਦਾ ਇੱਕ ਹੋਰ ਮੁੱਖ ਹਿੱਸਾ ਹੈ ਜੁੜੇ ਹੋਏ ਹਿੱਸੇ ਫੰਕਸ਼ਨ, ਜੋ ਇੱਕ ਬਾਈਨਰੀ ਚਿੱਤਰ ਵਿੱਚ ਸਾਰੀਆਂ ਵੱਖਰੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਲੇਬਲ ਕਰਦਾ ਹੈ। ਵਾਟਰਸ਼ੈੱਡ ਐਲਗੋਰਿਦਮ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਨ ਲਈ ਇਹ ਜ਼ਰੂਰੀ ਹੈ, ਕਿਉਂਕਿ ਇਸਨੂੰ ਵਿਅਕਤੀਗਤ ਵਸਤੂਆਂ ਵਿਚਕਾਰ ਫਰਕ ਕਰਨ ਲਈ ਮਾਰਕਰਾਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਸਕ੍ਰਿਪਟ ਕਾਲੋਨੀਆਂ ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ ਇਸ ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ, ਹਰੇਕ ਜੁੜੇ ਹੋਏ ਹਿੱਸੇ ਨੂੰ ਇੱਕ ਵਿਲੱਖਣ ਲੇਬਲ ਨਿਰਧਾਰਤ ਕਰਦੀ ਹੈ, ਜੋ ਬਾਅਦ ਵਿੱਚ ਵਿਭਾਜਨ ਪ੍ਰਕਿਰਿਆ ਦੌਰਾਨ ਸੁਧਾਰੀ ਜਾਂਦੀ ਹੈ।
ਅੰਤ ਵਿੱਚ, ਕੋਡ ਫੰਕਸ਼ਨਾਂ ਦੁਆਰਾ ਚਿੱਤਰ ਪ੍ਰੀਪ੍ਰੋਸੈਸਿੰਗ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ cv2.erode ਅਤੇ cv2.dilate. ਕਟੌਤੀ ਵਸਤੂਆਂ ਦੇ ਆਕਾਰ ਨੂੰ ਘਟਾਉਂਦੀ ਹੈ, ਜਦੋਂ ਕਿ ਫੈਲਾਅ ਉਹਨਾਂ ਨੂੰ ਫੈਲਾਉਂਦਾ ਹੈ। ਇਹ ਸੁਮੇਲ ਆਮ ਤੌਰ 'ਤੇ ਬਾਈਨਰੀ ਚਿੱਤਰਾਂ ਨੂੰ ਸਾਫ਼ ਕਰਨ, ਸ਼ੋਰ ਅਤੇ ਛੋਟੀਆਂ ਕਲਾਕ੍ਰਿਤੀਆਂ ਨੂੰ ਹਟਾਉਣ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਓਪਰੇਸ਼ਨ ਵਧੇਰੇ ਗੁੰਝਲਦਾਰ ਕੰਮਾਂ ਲਈ ਚਿੱਤਰ ਤਿਆਰ ਕਰਦੇ ਹਨ, ਜਿਵੇਂ ਕਿ ਵਾਟਰਸ਼ੈੱਡ ਸੈਗਮੈਂਟੇਸ਼ਨ। ਸਕ੍ਰਿਪਟ ਦਾ ਮਾਡਯੂਲਰ ਢਾਂਚਾ ਪ੍ਰੋਜੈਕਟ ਦੀਆਂ ਖਾਸ ਲੋੜਾਂ ਦੇ ਆਧਾਰ 'ਤੇ ਇਹਨਾਂ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਿੰਗ ਕਦਮਾਂ ਨੂੰ ਆਸਾਨੀ ਨਾਲ ਐਡਜਸਟ ਜਾਂ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਇਸ ਨੂੰ ਚਿੱਤਰ ਵਿਸ਼ਲੇਸ਼ਣ ਲਈ ਇੱਕ ਲਚਕਦਾਰ ਟੂਲ ਬਣਾਉਂਦਾ ਹੈ।
ਓਪਨਸੀਵੀ ਡਾਇਲੇਸ਼ਨ ਗਲਤੀ ਨੂੰ ਹੱਲ ਕਰਨਾ: ਪਹੁੰਚ 1 - ਵਾਟਰਸ਼ੈੱਡ ਵਿਧੀ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣਾ
ਇਹ ਸਕ੍ਰਿਪਟ ਓਪਨਸੀਵੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਇੱਕ ਪਾਈਥਨ ਹੱਲ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ ਜਿਸ ਵਿੱਚ ਗਲਤੀ ਹੈਂਡਲਿੰਗ ਅਤੇ ਡਾਈਲੇਟ ਫੰਕਸ਼ਨ ਲਈ ਡੇਟਾ ਪ੍ਰਮਾਣਿਕਤਾ 'ਤੇ ਧਿਆਨ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਇੱਕ PyQt5 ਵਾਤਾਵਰਣ ਵਿੱਚ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਨਾਲ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰਦਾ ਹੈ।
import cv2
import numpy as np
import sys
def load_image(filename):
img = cv2.imread(filename)
if img is None:
print(f"Error: Unable to load image: {filename}")
sys.exit(1)
return img
def preprocess_image(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, binary_img = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
return binary_img
def watershed_method(img_ori, img_bin):
kernel = np.ones((3, 3), np.uint8)
img_bin = cv2.dilate(img_bin, kernel, iterations=1)
dist_transform = cv2.distanceTransform(img_bin, cv2.DIST_L2, 5)
ret, sure_fg = cv2.threshold(dist_transform, 0.7*dist_transform.max(), 255, 0)
sure_fg = np.uint8(sure_fg)
markers = cv2.connectedComponents(sure_fg)[1]
return cv2.watershed(img_ori, markers)
img = load_image('bacteria_image.jpg')
img_bin = preprocess_image(img)
result = watershed_method(img, img_bin)
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
ਵਿਕਲਪਕ ਪਹੁੰਚ 2: ਫੈਲਾਅ ਦੇ ਮੁੱਦੇ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਰੂਪ ਵਿਗਿਆਨਿਕ ਤਬਦੀਲੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ
ਇਹ ਹੱਲ ਓਪਨਸੀਵੀ ਨਾਲ ਰੂਪ ਵਿਗਿਆਨਿਕ ਤਬਦੀਲੀਆਂ 'ਤੇ ਜ਼ੋਰ ਦਿੰਦਾ ਹੈ, ਸਹੀ ਕਰਨਲ ਆਕਾਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਚਿੱਤਰ ਨੂੰ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸ ਕਰਨ 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਤ ਕਰਦਾ ਹੈ ਅਤੇ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਇੰਪੁੱਟ ਸਹੀ ਢੰਗ ਨਾਲ ਹੈਂਡਲ ਕੀਤਾ ਗਿਆ ਹੈ।
import cv2
import numpy as np
import os
def load_and_resize_image(path, size=800):
if not os.path.isabs(path):
path = os.path.join('images', path)
img = cv2.imread(path)
if img is None:
raise ValueError("Image could not be loaded.")
scale = size / max(img.shape[0], img.shape[1])
return cv2.resize(img, None, fx=scale, fy=scale)
def apply_morphological_ops(img):
kernel = np.ones((5,5), np.uint8)
img_erode = cv2.erode(img, kernel, iterations=1)
img_dilate = cv2.dilate(img_erode, kernel, iterations=2)
return img_dilate
def run_pipeline(image_path):
img = load_and_resize_image(image_path)
img_bin = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, binary = cv2.threshold(img_bin, 127, 255, cv2.THRESH_BINARY)
processed_img = apply_morphological_ops(binary)
cv2.imshow('Processed Image', processed_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
ਵਧੀਆਂ ਡੀਬੱਗਿੰਗ ਤਕਨੀਕਾਂ ਰਾਹੀਂ ਓਪਨਸੀਵੀ ਗਲਤੀਆਂ ਨੂੰ ਹੱਲ ਕਰਨਾ
ਪਾਈਥਨ ਵਿੱਚ ਓਪਨਸੀਵੀ ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ, ਖਾਸ ਕਰਕੇ ਗੁੰਝਲਦਾਰ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਕਾਰਜਾਂ ਜਿਵੇਂ ਕਿ ਫੈਲਾਅ ਅਤੇ ਇਰੋਸ਼ਨ, ਓਪਨਸੀਵੀ ਦੁਆਰਾ ਸੰਚਾਲਿਤ ਅੰਡਰਲਾਈੰਗ ਡੇਟਾ ਢਾਂਚੇ ਨੂੰ ਸਮਝਣਾ ਜ਼ਰੂਰੀ ਹੈ। ਗਲਤੀਆਂ ਦਾ ਇੱਕ ਵੱਡਾ ਸਰੋਤ, ਜਿਵੇਂ ਕਿ ਨਾਲ ਦੇਖਿਆ ਗਿਆ ਹੈ cv2.error: (-5: ਮਾੜੀ ਦਲੀਲ), ਅਕਸਰ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਪਾਸ ਕੀਤੇ ਅਸੰਗਤ ਡੇਟਾ ਕਿਸਮਾਂ ਤੋਂ ਪੈਦਾ ਹੁੰਦਾ ਹੈ। ਇਹ ਗਲਤੀ ਦਰਸਾਉਂਦੀ ਹੈ ਕਿ ਇਨਪੁਟ ਚਿੱਤਰ ਨੂੰ NumPy ਐਰੇ ਦੇ ਰੂਪ ਵਿੱਚ ਸਹੀ ਢੰਗ ਨਾਲ ਫਾਰਮੈਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ, ਜੋ OpenCV ਫੰਕਸ਼ਨ ਕਰਦਾ ਹੈ cv2.dilate ਉਮੀਦ ਅਜਿਹੇ ਮੁੱਦਿਆਂ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਇਹ ਤਸਦੀਕ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਕਿ ਫੰਕਸ਼ਨ ਨੂੰ ਦਿੱਤਾ ਗਿਆ ਚਿੱਤਰ ਨਾ ਸਿਰਫ਼ ਸਹੀ ਫਾਰਮੈਟ ਵਿੱਚ ਹੈ, ਸਗੋਂ ਪਿਛਲੇ ਫੰਕਸ਼ਨਾਂ ਰਾਹੀਂ ਵੀ ਸਹੀ ਢੰਗ ਨਾਲ ਪ੍ਰੋਸੈਸ ਕੀਤਾ ਗਿਆ ਹੈ।
ਪਾਈਥਨ ਵਿੱਚ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਦਾ ਇੱਕ ਹੋਰ ਨਜ਼ਰਅੰਦਾਜ਼ ਪਹਿਲੂ ਉਹ ਵਾਤਾਵਰਣ ਹੈ ਜਿੱਥੇ ਕੋਡ ਚੱਲਦਾ ਹੈ। ਜਦੋਂ ਕਿ ਇੱਕ ਸਕ੍ਰਿਪਟ ਇੱਕ ਮਿਆਰੀ OpenCV ਵਾਤਾਵਰਣ ਵਿੱਚ ਨਿਰਵਿਘਨ ਕੰਮ ਕਰ ਸਕਦੀ ਹੈ, ਇਸ ਨੂੰ PyQt5 GUI ਨਾਲ ਜੋੜਨਾ ਅਨੁਕੂਲਤਾ ਮੁੱਦੇ ਪੇਸ਼ ਕਰ ਸਕਦਾ ਹੈ। PyQt5 ਆਪਣੇ ਖੁਦ ਦੇ ਚਿੱਤਰ ਫਾਰਮੈਟਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਇਸਲਈ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਮਹੱਤਵਪੂਰਨ ਹੈ ਕਿ ਫਾਰਮੈਟਾਂ ਵਿਚਕਾਰ ਪਰਿਵਰਤਨ ਸਹੀ ਢੰਗ ਨਾਲ ਸੰਭਾਲੇ ਗਏ ਹਨ। ਉਦਾਹਰਨ ਲਈ, PyQt5 ਚਿੱਤਰਾਂ ਨੂੰ NumPy ਐਰੇ ਵਿੱਚ ਬਦਲਣਾ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ OpenCV ਉਹਨਾਂ 'ਤੇ ਪ੍ਰਕਿਰਿਆ ਕਰ ਸਕਦਾ ਹੈ। ਵਰਗੇ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ cv2.cvtColor ਜਾਂ np.array ਵਰਕਫਲੋ ਵਿੱਚ ਸਹੀ ਬਿੰਦੂਆਂ 'ਤੇ ਪਰਿਵਰਤਨ ਇਹਨਾਂ ਮੁੱਦਿਆਂ ਨੂੰ ਘੱਟ ਕਰ ਸਕਦਾ ਹੈ।
ਡੀਬੱਗਿੰਗ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਹੋਰ ਅਨੁਕੂਲ ਬਣਾਉਣ ਲਈ, ਡੇਟਾ ਅਤੇ ਤਰੁੱਟੀਆਂ ਦੇ ਪ੍ਰਵਾਹ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਲੌਗਿੰਗ ਵਿਧੀ ਨੂੰ ਲਾਗੂ ਕਰਨ ਦੀ ਸਲਾਹ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ। ਸਿਰਫ਼ ਪ੍ਰਿੰਟ ਸਟੇਟਮੈਂਟਾਂ 'ਤੇ ਭਰੋਸਾ ਕਰਨ ਦੀ ਬਜਾਏ, ਜੋ ਕਿ ਕੰਸੋਲ ਨੂੰ ਬੇਤਰਤੀਬ ਕਰ ਸਕਦੇ ਹਨ, ਲੌਗਿੰਗ ਵਧੇਰੇ ਸੰਗਠਿਤ ਗਲਤੀ ਟਰੈਕਿੰਗ ਲਈ ਸਹਾਇਕ ਹੈ। ਪਾਈਥਨ ਦੀ ਵਰਤੋਂ ਕਰਨਾ logging ਮੋਡਿਊਲ ਚਿੱਤਰ ਡੇਟਾ ਦੀ ਇਕਸਾਰਤਾ ਅਤੇ ਫੰਕਸ਼ਨ ਕਾਲਾਂ 'ਤੇ ਵਿਸਤ੍ਰਿਤ ਸੰਦੇਸ਼ਾਂ ਨੂੰ ਕੈਪਚਰ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਕਿਸੇ ਮੁੱਦੇ ਦੇ ਸਰੋਤ ਦਾ ਪਤਾ ਲਗਾਉਣਾ ਆਸਾਨ ਹੋ ਜਾਂਦਾ ਹੈ ਜਿਵੇਂ ਕਿ cv2.dilate ਗਲਤੀ ਹਰ ਪੜਾਅ 'ਤੇ ਹੋਣ ਵਾਲੇ ਪਰਿਵਰਤਨਾਂ ਅਤੇ ਪਰਿਵਰਤਨਾਂ ਦੀ ਸਪਸ਼ਟ ਸਮਝ ਦੇ ਨਾਲ, ਡੀਬੱਗਿੰਗ ਬਹੁਤ ਜ਼ਿਆਦਾ ਸੁਚਾਰੂ ਹੋ ਜਾਂਦੀ ਹੈ।
ਪਾਈਥਨ ਵਿੱਚ ਓਪਨਸੀਵੀ ਗਲਤੀਆਂ ਲਈ ਆਮ ਸਵਾਲ ਅਤੇ ਹੱਲ
- ਕਿਉਂ ਕਰਦਾ ਹੈ cv2.dilate ਫੰਕਸ਼ਨ ਇੱਕ "ਬੁਰਾ ਦਲੀਲ" ਗਲਤੀ ਸੁੱਟਦਾ ਹੈ?
- ਅਜਿਹਾ ਇਸ ਲਈ ਹੁੰਦਾ ਹੈ ਕਿਉਂਕਿ ਇੰਪੁੱਟ ਲਈ cv2.dilate ਸਹੀ ਫਾਰਮੈਟ ਵਿੱਚ ਨਹੀਂ ਹੈ। ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਚਿੱਤਰ ਇੱਕ NumPy ਐਰੇ ਹੈ, ਜਿਸਦੀ ਪ੍ਰੋਸੈਸਿੰਗ ਲਈ OpenCV ਫੰਕਸ਼ਨ ਉਮੀਦ ਕਰਦੇ ਹਨ।
- ਮੈਂ ਇੱਕ PyQt5 ਚਿੱਤਰ ਨੂੰ OpenCV ਦੇ ਅਨੁਕੂਲ ਇੱਕ ਫਾਰਮੈਟ ਵਿੱਚ ਕਿਵੇਂ ਬਦਲ ਸਕਦਾ ਹਾਂ?
- ਦੀ ਵਰਤੋਂ ਕਰੋ cv2.cvtColor ਚਿੱਤਰ ਨੂੰ PyQt5 ਦੇ ਫਾਰਮੈਟ ਤੋਂ BGR ਚਿੱਤਰ ਵਿੱਚ ਬਦਲਣ ਲਈ ਫੰਕਸ਼ਨ, ਜਿਸ ਨੂੰ OpenCV ਪ੍ਰਕਿਰਿਆ ਕਰ ਸਕਦਾ ਹੈ।
- ਕੀ ਕਰਦਾ ਹੈ cv2.distanceTransform ਫੰਕਸ਼ਨ ਕਰਦੇ ਹਨ?
- ਦ cv2.distanceTransform ਫੰਕਸ਼ਨ ਹਰ ਪਿਕਸਲ ਤੋਂ ਨਜ਼ਦੀਕੀ ਜ਼ੀਰੋ ਪਿਕਸਲ ਦੀ ਦੂਰੀ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ, ਅਕਸਰ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਵਿੱਚ ਵਿਭਾਜਨ ਕਾਰਜਾਂ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।
- ਮੈਂ ਪਾਈਥਨ ਵਿੱਚ ਓਪਨਸੀਵੀ ਗਲਤੀਆਂ ਨੂੰ ਹੋਰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਕਿਵੇਂ ਨਿਪਟ ਸਕਦਾ ਹਾਂ?
- ਨੂੰ ਲਾਗੂ ਕਰੋ logging ਵਿਸਤ੍ਰਿਤ ਗਲਤੀ ਸੁਨੇਹਿਆਂ ਨੂੰ ਕੈਪਚਰ ਕਰਨ ਅਤੇ ਸਮੀਖਿਆ ਕਰਨ ਲਈ ਮੋਡੀਊਲ, ਜੋ ਕਿ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਦੌਰਾਨ ਮੁੱਦਿਆਂ ਦੇ ਸਰੋਤ ਦਾ ਪਤਾ ਲਗਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ।
- ਦੀ ਭੂਮਿਕਾ ਕੀ ਹੈ cv2.erode ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਵਿੱਚ ਫੰਕਸ਼ਨ?
- cv2.erode ਫੋਰਗਰਾਉਂਡ ਵਸਤੂਆਂ ਦੀਆਂ ਸੀਮਾਵਾਂ ਨੂੰ ਸੁੰਗੜਦਾ ਹੈ, ਚਿੱਤਰ ਤੋਂ ਛੋਟੇ ਸ਼ੋਰ ਨੂੰ ਹਟਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਬਾਈਨਰੀ ਚਿੱਤਰਾਂ ਵਿੱਚ।
ਪਾਈਥਨ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਓਪਨਸੀਵੀ ਗਲਤੀਆਂ ਨੂੰ ਹੱਲ ਕਰਨਾ
PyQt5 ਵਰਗੇ ਗੁੰਝਲਦਾਰ ਵਾਤਾਵਰਣਾਂ ਵਿੱਚ OpenCV ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਮਹੱਤਵਪੂਰਨ ਹੈ ਕਿ ਚਿੱਤਰ ਡੇਟਾ ਫਾਰਮੈਟ ਲਾਇਬ੍ਰੇਰੀ ਦੀਆਂ ਲੋੜਾਂ ਦੇ ਅਨੁਕੂਲ ਹਨ। ਇੱਥੇ ਗਲਤੀ OpenCV ਦੇ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਅਸੰਗਤ ਫਾਰਮੈਟ ਪਾਸ ਕਰਨ ਤੋਂ ਪੈਦਾ ਹੁੰਦੀ ਹੈ। ਸਹੀ ਪਰਿਵਰਤਨ ਅਤੇ ਪ੍ਰੀਪ੍ਰੋਸੈਸਿੰਗ ਤਕਨੀਕਾਂ ਅਜਿਹੀਆਂ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਰੋਕ ਸਕਦੀਆਂ ਹਨ।
ਇੱਕ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਪਹਿਲੂ ਹੈ ਡੀਬੱਗਿੰਗ ਅਤੇ ਚਿੱਤਰ ਪਰਿਵਰਤਨ ਨੂੰ ਕਦਮ-ਦਰ-ਕਦਮ ਤਸਦੀਕ ਕਰਨਾ। ਲੌਗਿੰਗ ਅਤੇ ਐਰਰ-ਹੈਂਡਲਿੰਗ ਵਿਧੀ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਡਿਵੈਲਪਰ ਪਤਾ ਲਗਾ ਸਕਦੇ ਹਨ ਕਿ ਡੇਟਾ ਪਾਈਪਲਾਈਨ ਕਿੱਥੇ ਟੁੱਟਦੀ ਹੈ। ਇਹ ਵਿਧੀ ਨਿਰਵਿਘਨ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦੀ ਹੈ ਅਤੇ ਭਵਿੱਖ ਵਿੱਚ ਹੋਣ ਵਾਲੀਆਂ ਗਲਤੀਆਂ ਨੂੰ ਰੋਕਦੀ ਹੈ ਫੈਲਾਅ ਜਾਂ ਹੋਰ ਕਾਰਵਾਈਆਂ।
ਓਪਨਸੀਵੀ ਐਰਰ ਰੈਜ਼ੋਲਿਊਸ਼ਨ ਲਈ ਹਵਾਲੇ ਅਤੇ ਸਰੋਤ
- ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਫੰਕਸ਼ਨਾਂ ਨਾਲ ਸੰਬੰਧਿਤ ਓਪਨਸੀਵੀ ਗਲਤੀਆਂ ਨੂੰ ਸੰਭਾਲਣ ਬਾਰੇ ਵਿਸਤ੍ਰਿਤ ਕਰਦਾ ਹੈ ਅਤੇ ਓਪਨਸੀਵੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਪਾਈਥਨ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਲਈ ਡੂੰਘਾਈ ਨਾਲ ਟਿਊਟੋਰਿਅਲ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਓਪਨਸੀਵੀ ਦਸਤਾਵੇਜ਼: ਇਰੋਜ਼ਨ ਅਤੇ ਫੈਲਾਅ
- PyQt5 ਚਿੱਤਰ ਹੈਂਡਲਿੰਗ ਅਤੇ ਓਪਨਸੀਵੀ ਨਾਲ ਇਸਦੀ ਆਪਸੀ ਤਾਲਮੇਲ ਬਾਰੇ ਚਰਚਾ ਕਰਦਾ ਹੈ, ਪਾਈਥਨ ਵਿੱਚ GUI- ਅਧਾਰਤ ਚਿੱਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਵਿੱਚ ਸਮਝ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। PyQt5 ਦਸਤਾਵੇਜ਼
- ਚਿੱਤਰ ਵਿਭਾਜਨ ਵਿੱਚ ਵਾਟਰਸ਼ੈੱਡ ਐਲਗੋਰਿਦਮ ਬਾਰੇ ਵਿਸਤ੍ਰਿਤ ਮਾਰਗਦਰਸ਼ਨ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਵਿਗਿਆਨਕ ਚਿੱਤਰ ਵਿਸ਼ਲੇਸ਼ਣ ਲਈ ਪਾਈਥਨ ਵਿੱਚ ਇਸਦੀ ਵਰਤੋਂ ਸ਼ਾਮਲ ਹੈ। OpenCV ਵਾਟਰਸ਼ੈੱਡ ਐਲਗੋਰਿਦਮ
- ਓਪਨਸੀਵੀ ਵਿੱਚ ਆਈਆਂ ਆਮ ਗਲਤੀਆਂ ਅਤੇ ਉਹਨਾਂ ਦੇ ਨਿਪਟਾਰੇ 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਤ ਕਰਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਪਾਈਥਨ 3.11 ਵਾਤਾਵਰਨ ਲਈ। ਸਟੈਕ ਓਵਰਫਲੋ: cv2.dilate ਗਲਤੀ