I have a .tiff UAV image and I need to get the R,G,B bands with georeferencing using tifffile. Any idea how do I achieve this?
this? tifffile · PyPI
or that (which is the above)? Module: external.tifffile — skimage v0.14.3 docs
I managed to get the 3 bands of the UAV .tiff and did some calculations (such as result = Green/ Red) with rasterio. But when I try to open the new .tif image I get this error:
self.img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
cv2.error: OpenCV(3.4.14) /tmp/pip-req-build-m7h7rfem/opencv/modules/imgproc/src/color.simd_helpers.hpp:88: error: (-2:Unspecified error) in function 'cv::impl::{anonymous}::CvtHelper<VScn, VDcn, VDepth, sizePolicy>::CvtHelper(cv::InputArray, cv::OutputArray, int) [with VScn = cv::impl::{anonymous}::Set<3, 4>; VDcn = cv::impl::{anonymous}::Set<3, 4>; VDepth = cv::impl::{anonymous}::Set<0, 2, 5>; cv::impl::{anonymous}::SizePolicy sizePolicy = cv::impl::<unnamed>::NONE; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]'
> Invalid number of channels in input image:
> 'VScn::contains(scn)'
> where
> 'scn' is 1
Any idea how to fix this?
The new .tif has only one channel! And I use PyQt to display it…
that means frame
is single-channel.
why is it single-channel?
why do you expect it to be BGR
?
Sometimes I open RGB tif images, sometimes 4-channels tif images and sometimes 1-channel tif images…How can I achieve that?
check the .shape
(height, width, channels), do stuff according to situation
Ok, so how do I make it accept 1-band tiff images? Which is the suitable flag?
that would require the source data to be BGR, i.e. 3-channel.
if you don’t have 3-channel data, you shouldn’t expect that color conversion code to work.
if you have 1-channel data instead, use a different color conversion code… perhaps one that reads like “gray to …”
The code I use is from google search/github. I don’t want to do any color conversion, just show the image on the PyQt window, either 4-band, 1-band, 3-band. I do not want to do any color conversion…Any ideas?
okay, so what formats does Qt like and how do you give the data to Qt?
- It reads RGBA and gray scale. I choose the file from a open file button.
- I read the channels like this:
height, width, channels = np.shape(tifimage)
When I load 4-band .tif image everything ok. When I load 1-band .tif image I get an error when I try to readchannels
variable…becausechannels
variable gets nothing…How can I avoid that?
if len(tifimage.shape) == 2:
(height, width) = tifimage.shape
channels = 1
else:
(height, width, channels) = tifimage.shape
Hello! Thanks! I get this error, any ideas??
if len(tifimage.shape) == 2:
AttributeError: 'NoneType' object has no attribute 'shape'
The image is not empty. I have just tested with QGIS and opens perfectly. However with the above code does not open, and when I check the shape (with another python code) it gives me only height and width and nothing/null for channels…
that literally means tifimage
was None
only you know why. I can’t see the code.
This is the info of the .tif image I am trying to open:
Band 1 Block=7421x1 Type=Float64, ColorInterp=Gray
Do you see anything wrong?
The .tif that I have the problem is float64
. Has anything to do with this?