import numpy as np
from scipy import signal
from opencv import adaptors
class scipyFromOpenCV(object):
"""This decorator can be used to wrap a function that takes
and returns a numpy array into one that takes and retuns an
opencv CvMat.
"""
def __init__(self, f):
self.f = f
def __call__(self, image):
# Convert CvMat to ndarray
np_image = adaptors.Ipl2NumPy(image)
# Call the original function
np_image_filtered = self.f(np_image)
# Convert back to CvMat
return adaptors.NumPy2Ipl(np_image_filtered)
@scipyFromOpenCV
def slowGaussianBlur(matrix):
"""Manual gaussian blur - Very very very slow!"""
filterSize = 3
filt = gauss_kern(filterSize)
r = signal.convolve(matrix[:,:,0],filt,'same')
g = signal.convolve(matrix[:,:,1],filt,'same')
b = signal.convolve(matrix[:,:,2],filt,'same')
result = array([r,b,g]).astype(uint8).transpose((1,2,0))
return result
Since about version 3.3 Python supports Bluetooth sockets natively. To put this to the test I got hold of an iRacer from sparkfun . To send to New Zealand the cost was $60. The toy has an on-board Bluetooth radio that supports the RFCOMM transport protocol. The drive protocol is dead easy, you send single byte instructions when a direction or speed change is required. The bytes are broken into two nibbles: 0xXY where X is the direction and Y is the speed. For example the byte 0x16 means forwards at mid-speed. I was surprised to note the car continues carrying out the last given demand! I let pairing get dealt with by the operating system. The code to create a Car object that is drivable over Bluetooth is very straight forward in pure Python: import socket import time class BluetoothCar : def __init__ ( self , mac_address = "00:12:05:09:98:36" ): self . socket = socket . socket ( socket . AF_BLUETOOTH , socket . SOCK_STREAM , socket .