【求助】怎样把图形转化成矩阵,并把矩阵的元素打印出来。
opencv吧
全部回复
仅看楼主
level 3
#include<iostream>
#include "cv.h"
#include "highgui.h"
using namespace std;
int main()
{
cout<<"进入系统----------->"<<endl;
//1、读入150*130灰度图片,将矩阵拉成一行
IplImage* img = cvLoadImage("f://6.jpg",0);
cout<<"----------------------图片加载成功!--------------------"<<endl;
CvMat* imgMat = cvCreateMat(img->height,img->width,CV_32FC1);//定义一个指向CvMat对象的指针
cvConvert(img,imgMat);
cout<<"图像转换成矩阵成功!"<<endl;
//将矩阵拉成一行
/*CvMat row_header, *row;
row = cvReshape( imgMat, &row_header, 0, 1 );
cout<<"行的像素个数为"<<row->cols<<endl;
cout<<"列的像素个数位"<<row->rows<<endl;*/
cout<<"行的像素个数为"<<imgMat->cols<<endl;
cout<<"列的像素个数为"<<imgMat->rows<<endl;
int text=CV_MAT_ELEM(*imgMat,int,200,100);
cout<<text<<endl;
//显示原图片。
cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
cvShowImage("window",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("window");
return 0;
}
以上是代码。就是用cvConvert函数把图片转换成矩阵。然后再用CV_MAT_ELEM这个宏
将矩阵的元素提取出来,并且打印。。然后输出结果就奇葩了。。
问题。。为什么矩阵里存的是1131872256.。这货是什么啊!!本以为应该是一个灰度值的说。。难道是我的打开方式不对??求解释。。求正解方法。。
2013年10月22日 10点10分 1
level 3
Opencv2 mat 跟容易
2013年12月18日 14点12分 3
level 1
楼主教我这个程序吧吧吧吧吧!!!!!
2014年04月19日 02点04分 4
额。。CVIMAGE类里有定义。自己去看吧。。我已经不用他自带的转矩阵的函数了。因为图像类里面就有能返回像素值的一个元素,然后你再按照他的像素数情况,输出来就好
2014年04月19日 04点04分
回复 xk673430905 :楼主请问详细的输出方法呗 , 急求啊
2014年04月19日 05点04分
回复 xk673430905 :用cvConvert转化的矩阵都是0是怎么回事啊
2014年04月19日 05点04分
回复 xk673430905 :- -真的是初学者不懂啊,就麻烦一点儿帮帮忙啦
2014年04月19日 05点04分
level 3
int cvShowPixel(IplImage *img,int x,int y)//函数定义:返回一张图的某一处像素的灰度值,参数:图片指针,行数,列数。
{
int pix(0);
pix=(int)((uchar*)(img->imageData+ (x-1)*img->widthStep))[y-1];
return pix;
}
↑这个函数是库里面没有的函数。是我自己定义的。其中那个第二句话
就是:pix=(int)((uchar*)(img->imageData+ (x-1)*img->widthStep))[y-1];
之前不是说了嘛,那个img对象里面有一个数据是imageDATA还有一个是widthstep。
char *imageData; /* 指向排列的图像数据 */
int widthStep; /* 排列的图像行大小,以字节为单位 */
imagedata是点的像素值,存储方式是存成一个很长的一维数组。
然后我就是返回x行y列的像素值嘛,那就让imageData的char指针移x-1位,然后再访问y-1位的值。然后还要强制转换类型。=(int)((uchar*)(
额。。实在是看不懂的话,就把我这个函数拿去用吧。。
然后img这个对象是有个行像素和列像素的数据成员的。。
你就用循环调用这个函数就行了。。
以上
2014年04月19日 06点04分 5
2014年04月19日 06点04分
2014年04月19日 06点04分
回复 xk673430905 :太谢谢啦,我去试一下
2014年04月19日 06点04分
回复 旺旺要喝牛奶 :我是做项目有用。。然后就发现cvMAT什么的就是个坑
2014年04月19日 06点04分
level 1
这个感觉显示的好奇怪啊,帮忙看下结果。。。。。这样是不是就行了
2014年04月19日 07点04分 6
好大。。找个小点的图,颜色丰富点的。。然后把他用文件流输出方便看。。额。。结果看起来貌似没问题了。好奇怪是因为你的图选的好奇怪吧。。那么多颜色是一样的。。
2014年04月19日 07点04分
控制台输出就是坑
2014年04月19日 07点04分
回复 xk673430905 :我是想求图像的方程用矩阵,所以带的是灰度图,这个结果也没办法解方程啊==
2014年04月19日 07点04分
回复 旺旺要喝牛奶 :像素都可以给你整出来了。。求方程是什么情况!求方程的算法都有吧。。为什没要打印出来啊,直接调用函数,想第几行第几列的像素都能弄出来。嘛,lz就只能帮你到这了= =
2014年04月19日 07点04分
level 2
为何不直接使用
Mat img_get = imread("../*.jpg");
cout<<img_get<<endl;
这样直接就打印出img_get的内容了。当然,由于控制台上读取数据很拙计,建议使用边长30像素一下的图片…图片大了输出都要半天
最好的方法还是把图片内容写入txt来看,如果一定要看数值的话
2014年04月22日 02点04分 9
Mat 经测量,貌似只能方阵。。我是说貌似
2014年04月22日 03点04分
level 1
不知道你解决了没
咱并不会CV,咱是偶然看到这的,不过咱会用咱的c语言的经验解释一下
你在输出行列像素数后的两句
int text=CV_MAT_ELEM(*imgMat,int,200,100);
cout<<text<<endl;
text只是个int变量,所以你看到的输出只是一个数,我估计你想要的效果应该是做一个int数组一类的,然后遍历数组中的每一个元素,并输出才可以
2016年10月03日 12点10分 12
1