I would like to take the four points at the end of the black line on the shogi board.
Original image (Fig. 1)Grayscale and canny edge from to output the image and it seems to work (Fig. 2)However, even if I do a Hough transform after that, the line is not drawn just right. How can I get 4 points at the end? If i have any policy, please let me know. Any answer will be helpful, so thank you.
import cv2 import numpy as np img = cv2.imread ('ba-n.jpg') kernel = np.ones ((2, 2), np.uint8) gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny (gray, 1, 100, apertureSize = 3) cv2.imwrite ('houghlines6_edge.jpg', edges) lines = cv2.HoughLines (edges, 1, np.pi/180, 200) for line in lines: rho, theta = line  a = np.cos (theta) b = np.sin (theta) x0 = a * rho y0 = b * rho x1 = int (x0 + 1000 * (-b)) y1 = int (y0 + 1000 * (a)) x2 = int (x0 --1000 * (-b)) y2 = int (y0 --1000 * (a)) cv2.line (img, (x1, y1), (x2, y2), (0, 0, 255), 2) cv2.imwrite ('houghlines3.jpg', img)
Answer # 1
Isn't it easier to detect the line by Hough transform if the line is thickened by the expansion process (deliate)?
If the Hough transform doesn't work,
(1) After expansion processing, find contour is detected by findContours.
(2) Probably the quadrangle you want to detect has the largest area, so calculate the area with the contourArea and detect only the largest one.
③ Detect the coordinates of the four corners with the idea below
・ Lower left: Extract the point with the smallest x coordinate
・ Lower right: Extract the point with the largest x coordinate
・ Upper left: In order to extract the point closest to the upper left, extract the largest point on the coordinate axis rotated by 135 °.
・ Upper right: In order to extract the point closest to the upper right, extract the largest point on the coordinate axis rotated by 45 °.
The link below also detects the points at the four corners of the tennis court.
[Sports image analysis 4 using OpenCV (motion tracking)] Automatic detection of tennis court lines
Answer # 2
I think it is a standard method as a rough direction.
There are a lot of small noises caused by shogi frames. Is this one of the reasons why the Hough transform does not work?
Why not try removing these noises manually and applying a Hough transform? If it works, you should consider denoising.
Alternatively, another approach might be to detect only the outermost line (scan from the outside).
Answer # 3
In this image, the reflection around the lower right is severe, but do you generally assume a situation with such a disturbance?
If so, I would consider detection processing in the form of a "9x9 grid".
- python 3x - i want to extract data from a python list 2
- python - i want to handle webdriverchrome ()
- python - i want to open a file with an absolute path
- python - i want to send a list of yahoo news rankings to line
- python - i want to add an element to a double list
- python - i want to scrape google news, but i can't
- python - i want to move images with pygame
- python - i want to solve this problem
- python - i want the block to disappear when the ball hits the block
- python - i want to add a line number to the data frame
- python - i want to pass a list as an argument of glob and repeat it
- python - i want to find the mode of a pixel with a pixel value of 1 or more
- python - i want to combine two dfs
- python - i want to avoid line breaks in the file path
- python - i want to read an image and display it
- i want to get json from url in swift and pour it into label
- i want to get the full text of rt with tweepy in python
- python - i want to ignore the header and loop
- python - if __name__ == i want to know about'__main__'