/**
* IplImage转化为Bitmap
* @param iplImage
* @return
*/改虚
public Bitmap IplImageToBitmap(IplImage iplImage) {
Bitmap bitmap = null
bitmap = Bitmap.createBitmap(iplImage.width(), iplImage.height(),
Bitmap.Config.ARGB_8888)
bitmap.copyPixelsFromBuffer(iplImage.getByteBuffer())
return bitmap
}
/**
* Bitmap转化为IplImage
* @param bitmap
* @return
*/
public IplImage bitmapToIplImage(Bitmap bitmap) {
IplImage iplImage
iplImage = IplImage.create(bitmap.getWidth(), bitmap.getHeight(),
IPL_DEPTH_8U, 4)
bitmap.copyPixelsToBuffer(iplImage.getByteBuffer())
return iplImage
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
里面主要是用到了Bitmap的两个函数:
public void copyPixelsFromBuffer (Buffer src)
从buffer中复制点到Bitmap中,并且从初始位置开始会覆盖掉Bitmap中原来的点,复制过程中buffer的点不会以任何方式改变,不管原bitmap格式如何最终都会以32位的方式写入
public void copyPixelsToBuffer (Buffer dst)
将Bitmap中的点复制到指定的buffer当中,如果dst的空间不够大不能容下唤歼差bitmap中和皮的所有点,或者dst不是ByteBuffer, ShortBuffer, IntBuffer这三种之一,函数则会抛出异常
好像是一维数组保存的图像像素数据或罩;你衫顷闹可以转到Iplimage 头文件看下直接的做法可以,先创建一个这两张图片加起来的大小iplimage结构(cvCreateImage?),再把两张图片乎尘复制到对应的区域(可用CV_IMAGE_ELEM宏.... 或者cvCopy这类的(支持ROI))
//if has img1, img2, 8 , 3
Iplimage *pRes = cvCreateImage(imag1->width + img2->width, max(img1->height, img2->heigtht, 8, 3)
//设置ROI,这样cvCopy 才知道要复制到目标图像的什么位置
cvSetImageROI(pRes, cvRect(0, 0, img1->width,img1->height))
cvCopy(img1, pRes)
cvSetImageROI(pRes, cvRect(img1->width, img1->height, img2->width, img2->height)
cvCopy(img2, pRes)
cvRestImageROI(pRes)
//以上代码不一定对,没测试过
#include<敬陵vector>//头文件std::vector<IplImage*> m_frames//创建一个vector容器
m_frames.push_back(frame)//frame是你仔稿册需要保存的信息。
读取的时候可以;
1、
for(int i = 0 i < (int)m_frames.size() i++)
{
IplImage* m_ig = m_rames[i]//取出的值
{
2、
std::vector<IplImage*>::iterator itor = m_frames.begin()
for( itor != m_frames.end() itor++)
{
念宏IplImage* m_ig = *itor//取出的值
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)