来自示波器的照片的磁滞曲线面积。 (OpenCV)
=“ https://media.discordapp.net/attachments/862806580865400903/9736164404043753896/inknown.png?
;我已经尝试了odode
和扩张
在删除网格之后和之前,但是之后我的曲线很差。也许您可以建议我一种更有效的方法来纠正曲线。
import sys
import cv2
import numpy as np
def remove_grid_lines(src):
clean_lines_h = remove_lines(src, np.ones((1, 10), np.uint8), np.ones((1, 5), np.uint8))
clean_lines_v = remove_lines(src, np.ones((10, 1), np.uint8), np.ones((5, 1), np.uint8))
return cv2.bitwise_not(cv2.bitwise_not(src) - clean_lines_h - clean_lines_v)
def remove_lines(src, kernel1, kernel2):
erosion = cv2.erode(src, kernel1, iterations=1)
dilation = cv2.bitwise_not(cv2.dilate(erosion, kernel1, iterations=1))
clean_lines = cv2.dilate(cv2.erode(dilation, kernel2, iterations=6), kernel2, iterations=6)
return clean_lines
def main(argv):
original_image = cv2.resize(cv2.imread(argv[0]), (640, 640))
grayscale_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
grayscale_image = cv2.GaussianBlur(grayscale_image, (3, 3), 0)
(thresh, binary_image) = cv2.threshold(grayscale_image, 120, 255, cv2.THRESH_BINARY)
binary_image = cv2.bitwise_not(binary_image)
cv2.imshow("Original", original_image)
cv2.imshow("Grayscale", grayscale_image)
cv2.imshow("Binary", binary_image)
binary_image = remove_grid_lines(binary_image)
cv2.imshow("Clean", binary_image)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__ == "__main__":
main(sys.argv[1:])
Good evening, I have some problems correcting an image after removing grid to get area of that curve. I have tried erode
and dilate
after and before removing grid, but i have had a bad curve after that. Maybe you can advise me a more efficient way to correct the curve.
import sys
import cv2
import numpy as np
def remove_grid_lines(src):
clean_lines_h = remove_lines(src, np.ones((1, 10), np.uint8), np.ones((1, 5), np.uint8))
clean_lines_v = remove_lines(src, np.ones((10, 1), np.uint8), np.ones((5, 1), np.uint8))
return cv2.bitwise_not(cv2.bitwise_not(src) - clean_lines_h - clean_lines_v)
def remove_lines(src, kernel1, kernel2):
erosion = cv2.erode(src, kernel1, iterations=1)
dilation = cv2.bitwise_not(cv2.dilate(erosion, kernel1, iterations=1))
clean_lines = cv2.dilate(cv2.erode(dilation, kernel2, iterations=6), kernel2, iterations=6)
return clean_lines
def main(argv):
original_image = cv2.resize(cv2.imread(argv[0]), (640, 640))
grayscale_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
grayscale_image = cv2.GaussianBlur(grayscale_image, (3, 3), 0)
(thresh, binary_image) = cv2.threshold(grayscale_image, 120, 255, cv2.THRESH_BINARY)
binary_image = cv2.bitwise_not(binary_image)
cv2.imshow("Original", original_image)
cv2.imshow("Grayscale", grayscale_image)
cv2.imshow("Binary", binary_image)
binary_image = remove_grid_lines(binary_image)
cv2.imshow("Clean", binary_image)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__ == "__main__":
main(sys.argv[1:])
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论