Ask Your Question

Converting CV::Mat to double *

asked 2017-02-07 22:41:11 -0500

BhanuKiran gravatar image


I am using C++ openCV-3.2.0 version.

I am also using a library for line segment detection,which takes only .pgm image of data type double *. I used

cv::Mat pgm_image;

pgm_image = cv::imread("image.pgm");

double *I = pgm_image.ptr<double>(0);

to read the image and to for getting pointer. And i tried parsing double * into the library that i am using. Is there any way around this? or Is there a way read .pgm file directly as double* ?

edit retag flag offensive close merge delete


i doubt, that there is double data inside your PGM file .

can you show the file header ?

head -c 200 image.pgm

(then add to your question)

berak gravatar imageberak ( 2017-02-08 00:58:42 -0500 )edit

Hi, It looked like this


820 615


188 188 188 190 .........

BhanuKiran gravatar imageBhanuKiran ( 2017-02-08 01:04:28 -0500 )edit

1 answer

Sort by ยป oldest newest most voted

answered 2017-02-08 01:19:41 -0500

berak gravatar image

updated 2017-02-08 01:20:21 -0500

so, your file is in the "plain PGM" format, and contains single channel uchar data (not double).

to get a double *, you'll have to convert it:

Mat pgm_image = imread("image.pgm", IMREAD_GRAYSCALE); //flag is important !
Mat pgm_double;
pgm_image.convertTo(pgm_double, CV_64F); // optionally scale by 1.0/255, if you need [0..1] range
double *I = pgm_double.ptr<double>(0);
edit flag offensive delete link more
Login/Signup to Answer

Question Tools

1 follower


Asked: 2017-02-07 22:41:11 -0500

Seen: 3,546 times

Last updated: Feb 08 '17