Mr Sensible conducted a high altitude ballon experiment that contained 3 cameras, a pressure and a temperature sensor and a GPS device. The goal was to record pressure, temperature and altitude, as well as to show the curvature of the earth to an altitude up to 39,000 m. The altitude was almost reached.
Video: MAGE II  What shape is the Earth?; M.A.G.E.  Mission Above Globe Earth  The final results!
On this page I compare the curvature of the horizon with the predicted curvature of my Curvature App. The curvature shown in the video linked above matches exactly with the prediction of the Curvature App, which is based on a globe with radius 6371 km. This means, the observed curvature of the horizon is caused by the spherical shape of the earth.
The Front Camera with the 2 strings in the field of view was a Firefly 8SE 90°, set to a diagonal field of view of 51.6°, see Measuring the Field of View of the Front Camera. This camera has only a slight barrel distortion, which I corrected with a Lightroom setting of 8 of 100, so that the 2 strings are straight and the image shows the undistorted reality.
Then I imported the image into my Curvature App, set the observer altitude to 38,706 m as indicated in the video and set the field of view to 51.6° as measured from the camera. Then I tilted and rotated the graph of my App so it aligns with the horizon.
Note that the horizon is not only curved as expected on the globe, but also has dropped from eye level about 6.3°.
Trick: if we have such a fuzzy horizon, we can exaggerate the curvature by compressing the image horizontally in an image processing software.
The field of view of this camera of 51.6° is quite narrow. The amount of apparent curvature depends not only on the altitude, but also on the field of view. The wider the field of view, the more pronounced the curvature appears. This can be observed below on the back camera, that had a wider field of view. This fact is demonstrated in the following Animation of the Curvature App.
The strings are 55 mm apart at a distance of 350 mm from the camera front. This gives an angle of view between the strings of 8.99°, which is almost exactly 1/3 of the vertical field of view of 26.66°.
The curvature app calculated a horizon drop of 6.3° from eye level. Using the vertical field of view between the strings as a reference and measuring 6.3° up from the horizon, we get where eye level is in the image, no matter whether the camera is pointing up or down. It turns out, that the measured eye level is exactly at the position where the App draws the eye level line. This confirms that the geometry calculated by the App is spot on with the image (select Calculator Overlay with Data).
If the calculation of the Curvature App were wrong or if the field of view were not correct determined or if the applied Lens Correction were not accurate, the horizon drop measured from the pixel values in the image would not match the calculated horizon drop.
The Back Camera was a GoPro Hero4 set to 16x9 Narrow. The GoPro Hero4 uses a fisheye lens with strong barrel distortion. I used the GoPro Hero4 Lens Correction in Adobe Lightroom to correct the distortion and enhanced the contrast. Then I imported the image into my Curvature App, where I set the observer altitude to 30,039 m and the field of view to 68.9°, see Calculating the Field of View of the Back Camera. Then I only had to tilt and rotate the graph of the Curvature App to align it with the horizon.
Note: although the image above was taken at a lower altitude than the image of the front camera, the curvature is more pronounced and more distinct, because this camera has a wider field of view.
I used the footage of the GoPro Hero4 Back Camera for the following images taken at different altitudes, from 10,000 m to the ceiling in 6000 m steps. I applied the GoPro Hero4 Lens Correction on each image in Lightroom and slightly enhanced the image to get a better contrast of the horizon. Then I imported each image in my Curvature App, set the corresponding altitude and the field of view to 68.9°, see Calculating the Field of View of the Back Camera, and aligned the calculated horizon graph with the horizon of the image by rotating and tilting the calculated horizon. Click on "→ Show in App" below the images to load the corresponding image in the Curvature App.
Note that the Lens Correction does not create the curvature of the horizon. If it were so, then the curvature of the App would not match the curvature of the horizon on every single image no matter where the horizon is in the frame.
The front camera with the 2 strings was a Firefly 8SE 90°. The field of view can be change to 3 settings. The smallest field of view was chosen. For my Curvature App I needed the exact diagonal field of view of the camera setting used. Q provided me with the image on the right. From this I can calculate the field of view as follows:
We see on the image that at a distance of 460 mm a vertical range of 218 mm is visible. The aspect ratio is 16x9, so the diagonal is:
(1) 
The diagonal field of view α can be calculated from the diagonal d = 444.66 mm and the distance s = 460 mm using the following equation:
(2) 

The Back Camera was a GoPro Hero4 set to 16x9 Narrow. The Lens Correction in Lightroom streched the image in a manner that the vertical field of view remains unchanged. According to HERO4 Field of View (FOV) Information, the vertical field of view for the Narrow setting is 37.2°. For my Curvature App I need the diagonal field of view after the application of the lens correction.
This can be calculated as follows: first I need the distance of the image plane from the viewpoint in pixels, calculated from the image height in pixels and the vertical field of view:
(3)  
where^{'} 

Now I have to calculate the image diagonal from the image height using a ratio w:h = 16:9.
(4) 
Now I can calculate the diagonal field of view
(5) 

This is the viewing angle I have to enter in the input field View∠ of the Curvature App.