如何将图像从CV_8UC1转换为CV_32FC1类型在opencv



我读了一个图像,它的类型是CV_8UC1,我想把它转换成CV_32FC1。但是当我使用convertTO()函数时,我的图像变得完全白色,我不知道为什么!

Mat Image(512,512,CV_32FC1);     
Image = imread("C:\MGC.jpg",CV_LOAD_IMAGE_GRAYSCALE);   
/// show image
namedWindow("pic");
int x = 0; int y = 0;
imshow("pic", Image);
cout<<Image.type()<<endl;
Image.convertTo(Image,CV_32FC1);
cout<<Image.type()<<endl;
////show converted image 
namedWindow("pic1");
imshow("pic1",Image );

因为32FC类型元素图像的可显示范围是[0:1](for imshow)。试试这个。

Image.convertTo(Image,CV_32FC1, 1.0/255.0);

Andrey使用的方法在当前(v3.4)的opencv for python中似乎不存在。下面是使用scikit-image

的替代解决方案http://scikit-image.org/docs/dev/user_guide/data_types.html

 import cv2
 from skimage import img_as_float
 cap = cv2.VideoCapture(0)
 ret, frame = cap.read()
 image1  = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
 image2 = img_as_float(image1)
 cv2.imshow('IMAGE1',image1)
 cv2.imshow('IMAGE2', image2)
 while(1):
     k = cv2.waitKey(100) & 0xff
     if k == 27:
        break
 cap.release()
 cv2.destroyAllWindows()

这是一个缩放问题。cvtColor在数据类型的范围内是棘手的。

如果您从CV_8U更改为CV32F,并且范围不能自行缩放,则必须指定缩放度量

相关内容

  • 没有找到相关文章

最新更新