|
|
|
| Together we can score larger rows than we can apart. |
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
||||
|
||||
|
OpenCV: findContours() messing with images?
Hi,
We used GRIP for Stronghold and was super nice and easy. Now, I want to take it to the next level with OpenCV. I am currently having a lot of trouble just trying to find a contour in anything! The findContours function seems to be interfering with something which makes the edges image deteriorate. For example, here is the Canny edge with and without it being the source of the findContour function: http://imgur.com/a/7kqAw Here is the super simple code I am using: Code:
import cv2 as cv
import numpy as np
img = cv.imread("29.jpg")#Sample image of Field
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #Convert to gray...just to try
edges = cv.Canny(gray, 200, 300)
#Finds the contours
image, contours, hierarchy = cv.findContours(edges,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_NONE)
#Draws
cv.drawContours(img, contours, 1, (0, 255,255), 3)
#Shows
cv.imshow("edges!", edges)
cv.imshow("mask!", gray)
cv.imshow("frame!", img)
k = cv.waitKey(0)
cv.destroyAllWindows()
I am super new to OpenCV so there is a strong possibility that there is something that I am doing completely wrong. Any help would greatly be appreciated! |
|
#2
|
||||
|
||||
|
Re: OpenCV: findContours() messing with images?
If you're using findContours(), you don't need to use Canny Edge Detection. By using Canny first, you're narrowing down the image and giving findContours() less information to work with, and so it's tolerances will cut out anything too small
Here's our code for acquiring the goal, although it is in C++ instead of Python I believe the API is roughly the same |
|
#3
|
||||
|
||||
|
Re: OpenCV: findContours() messing with images?
Quote:
|
|
#4
|
|||
|
|||
|
Re: OpenCV: findContours() messing with images?
Firstly, I would recommend converting to HSV and doing HSV filtering at some point (but it sounds like gray was just temporary).
I think doing HSV filtering would help a bit, but it also might not. I can PM you our code, it will be going to github once I've cleaned it up but I can give it you now if it would help. Also, in my code if I draw contours I don't just call the function, I put the result into a varialbe, like: Code:
outImage = cv2.drawContours(origImage, contours, -1, (255, 255, 0), 1) So I would say to do HSV filtering now, I can give you my code to do it if you want, and to also look into the variable return thingy. |
|
#5
|
||||
|
||||
|
Re: OpenCV: findContours() messing with images?
Quote:
Code:
import cv2 as cv
import numpy as np
img = cv.imread("29.jpg")#Sample image of Field
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #Convert to gray...just to try
edges = cv.Canny(gray, 200, 300)
#Finds the contours
scratch = edges.copy()
image, contours, hierarchy = cv.findContours(scratch,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_NONE)
#Draws
cv.drawContours(img, contours, 1, (0, 255,255), 3)
#Shows
cv.imshow("edges!", edges)
cv.imshow("mask!", gray)
cv.imshow("frame!", img)
k = cv.waitKey(0)
cv.destroyAllWindows()
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|