Opencv integration

Hey @kislayabhi I played with your branch today and I made some refactors to it. Have a look, understand what I did then merge into your branch and update the other factory class to match this style a bit. I'll probably play around with the other factory tomorrow too so if you're not going to work tomorrow then hold off merging this in because I might do some more work.

feel free to ask questions or make comments!
this is a pretty hacky solution we should copy these out or automate this somehow. Fun fact though I tested all 3 conversion methods and they all worked fine here (including the constructor) So maybe there was a problem in your other test? It would be good to figure out what was happening there still (maybe it was only affecting the other factory?)

We can also re-do the benchmarks now, simply make a big matrix in the test helper and then look at the test times. You can also update your benchmarking program and test again