
/**
* 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这三种之一,函数则会抛出异常
”我的Image里面只有7张图片,所以我以为定义filename 的大小为7“你可知,filename是啥?
"G:\\转码视频\\Image\\out.avi"这整个的是一个filename,你自己数数这一个图像你用了几个char来存储的?
你这个程序错到离谱了,这里是读取视频的程序
#include "stdafx.h"
#include "highgui.h"
int main( int argc ,char ** argv){
CvCapture * capture = cvCreateFileCapture ("tree.avi") //读取视氏枝灶频
if(capture==NULL) {
printf("NO capture") //读取不成功,则标识
return 1
}
double fps=cvGetCaptureProperty(capture, CV_CAP_PROP_FPS ) //读取视频的帧率
int vfps = 1000 / fps //计算每帧播放的时间
printf("%5.1f\t%5d\n",fps,vfps)
double frames=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT)//读取视频中歼扮有多少帧
printf("frames is %f\n",frames)
cvNamedWindow("example",CV_WINDOW_AUTOSIZE) //定义窗口
IplImage * frame
while(1){
frame = cvQueryFrame( capture ) //抓取帧
float ratio = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO)//读取该帧在视频中的相对位置
printf("%f\n",ratio)
if(!frame)break
cvShowImage("example",frame) //显示
char c = cvWaitKey(vfps)
if(c == 27 )break
}
cvReleaseCapture(&capture)
cvDestroyWindow("example")
}
写视频的第一步要先读图,然后写!
另外楼上的,\\搭圆和\是不一样的,望注意。
CvImage( IplImage* img )可以将IplImage转换昌判差为CvImage。CvImage类中
protected:
IplImage* image// 实际影象
int* refcount // 引用计耐皮数
IplImage* image由于是protected.
可以在OpenCV\cxcore\src\cximage.cpp里添加一个方法
IplImage* getImage(){
returen image
}
重新冲岁编译可用,实现
CvImage转换IplImage
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)