Before I get married into a system, I like to do little experiments. Since the GUI and graphics are going to be the most difficult, particularly the streaming video to a portion of the GUI, I would do that part first. Try a PI 3 and see how it goes. Can you connect the camera? Will OpenCV display the stream? Can you embed the output of OpenCV into your GUI.
The answer to all of the above is "YES" but the devil is in the details.
http://opencv.org/Start with "High-level GUI" just to see the minimal GUI with a video capability:
http://docs.opencv.org/3.1.0/d7/dfc/group__highgui.html#gsc.tab=0While OpenCV was designed for use in full-scale applications and can be used within functionally rich UI frameworks (such as Qt*, WinForms*, or Cocoa*) or without any UI at all, sometimes there it is required to try functionality quickly and visualize the results. This is what the HighGUI module has been designed for.
It provides easy interface to:
•Create and manipulate windows that can display images and "remember" their content (no need to handle repaint events from OS).
•Add trackbars to the windows, handle simple mouse events as well as keyboard commands.
Remember, you are counting on Linux to provide a metric dumpster load of code. Stuff you don't want to write!
Once you get a rudimentary GUI/display running, it will be pretty easy to do the real GUI in something like Qt and you can write it in C, C++, JAVA or Python. There is a Qt library for each of these (although I have only used the Python variant). You will also find Python code for dealing with the hardware IO on the headers. It's in the PI distribution.
Incidentally, OpenCV also runs on MacOS, iOS, Windows and Android. So, you can migrate your GUI to an Android tablet and use WiFi to connect to the STM32F. You might want to consider not coupling the systems with SPI if networked connections can be responsive enough. That assumes, of course, that you can find a TCP/IP stack for the STM32F. If not, Microchip has a stack for their PIC32 - free!