Sida 3 av 3

Re: OpenCV-Python träffbildsanalys

Postat: 25 april 2019, 21:07:48
av Shimano
Superjobb med scriptet som "vänder upp" bilden! Av någon anledning lyckas jag inte köra det själv, får felkoden men förstår inte riktigt varför exftersom approx är tydligt definierad på rad 26...

File "test.py", line 32, in <module>
pts1 = np.float32(approx)
NameError: name 'approx' is not defined

Kod: Markera allt

#!/usr/bin/python

# Standard imports
import cv2
import numpy as np;
import math

# Read image
img = cv2.imread("1.jpg",1)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

lower_board = np.array([0,0,230])
upper_board = np.array([180,255,255])

mask = cv2.inRange(hsv,lower_board, upper_board)
result = cv2.bitwise_and(img,img,mask = mask)
imgray = cv2.cvtColor(result,cv2.COLOR_BGR2GRAY)

im2, contours, hierarchy = cv2.findContours(imgray,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

for i, contour in enumerate(contours):
	area = cv2.contourArea(contour)
	if area <= 10000:
		continue
	epsilon = 0.1*cv2.arcLength(contour,True)
	approx = cv2.approxPolyDP(contour,epsilon,True)
	cv2.drawContours(img,[approx],0,(0,0,255),2)
	print(approx)
pts1 = np.float32(approx)
pts2 = np.float32([[0, 0], [0, 500], [750, 500], [750, 0]])
matrix = cv2.getPerspectiveTransform(pts1, pts2)
warped = cv2.warpPerspective(img, matrix, (750, 500))

Re: OpenCV-Python träffbildsanalys

Postat: 25 april 2019, 21:20:18
av Krille Krokodil
Jag trodde inte det skulla fungera men det gör det när jag kör det.

Testa att ovanför for-loopen definera den variabeln, ex. approx=0

Re: OpenCV-Python träffbildsanalys

Postat: 25 april 2019, 21:27:59
av Shimano
Då får jag följande fel istället... Jag måste nog börja försöka sätta mig in i programmeringen på ett djupare sätt för att ro detta i hamn.

Kod: Markera allt

 File "test.py", line 33, in <module>
    matrix = cv2.getPerspectiveTransform(pts1, pts2)
TypeError: src is not a numpy array, neither a scalar

Re: OpenCV-Python träffbildsanalys

Postat: 25 april 2019, 22:22:07
av Johanb
Vad behöver jag och hur gör jag för att testa?

Re: OpenCV-Python träffbildsanalys

Postat: 26 april 2019, 07:18:13
av Shimano
Jag använde nedanstående guide för att installera programmen(Python, OpenCV/Numpy/Matplot) på min Windows-dator. Som utvecklingsmiljö anvnänder jag Sublime(underlättar eftersom Python är petigt med tabbarna).

https://solarianprogrammer.com/2016/09/ ... n-windows/

Re: OpenCV-Python träffbildsanalys

Postat: 26 april 2019, 20:54:36
av Sado
Vilken bild använder ni för att testa med? Jag provade solglasögonbilden men fick not enough values to unpack från findContours().

Re: OpenCV-Python träffbildsanalys

Postat: 27 april 2019, 12:27:37
av Shimano
Använd denna bilden :)
Bild

Det verkar vara något som gör att Pythonskripten med OpenCV funkar på vissa system men inte andra, jag förstår inte riktigt varför. Kanske har det något med bytet från Python 2 till 3?

Re: OpenCV-Python träffbildsanalys

Postat: 27 april 2019, 12:31:01
av Krille Krokodil
Arbeta stegvis, Ex. så kan man plotta histogram utklipp av HSV-bilden för att se vilka värden på
färgerna man ska maska. Finns kod på det om man söker.

I Mvtec Halcon som jag jobbar i så kan man analysera alla bilder och konturer som skapas i programmet,
tyvärr finns där väl inget IDE till OpenCV som är nära så bra. Tråkigt, OpenCV är i grunden väldigt bra, det
hade förtjänat ett bättre IDE. Mvtec gör väldigt bra dokumentation och videos, det kan vara värt att titta på
deras exempel och sedan försöka överföra metodiken till OpenCV.

HDevelop Tutorial 01: GUI and Navigation - MVTec HALCON


https://www.mvtec.com/products/halcon/documentation/

Re: OpenCV-Python träffbildsanalys

Postat: 27 april 2019, 13:13:27
av Shimano
Jag lyckades få ihop en kod som fungerar, med krilles modell. Kolla den här youtube videon där förklaras dom olika stegen https://www.youtube.com/watch?v=PtCQH93GucA

Kod: Markera allt

#!/usr/bin/env python

import cv2
import numpy as np


im_src = cv2.imread('1.jpg')
frame = cv2.imread('1.jpg')

cv2.circle(im_src, (230,85),5,(0,0,255),-1)
cv2.circle(im_src, (205,680),5,(0,0,255),-1)
cv2.circle(im_src, (995,650),5,(0,0,255),-1)
cv2.circle(im_src, (910,145),5,(0,0,255),-1)

pts1 = np.float32([[230,85],[910,145],[205,680],[995,650]])
pts2 = np.float32([[0,0],[700,0],[0,500],[700,500]])

matrix = cv2.getPerspectiveTransform(pts1,pts2)
result = cv2.warpPerspective(frame, matrix, (700,500))

cv2.imshow("Frame", result)
cv2.imshow("Source Image", im_src)
 
cv2.waitKey(0)
Bild