opencv 读视频问题,读入图像为空

我在mac上能打开摄像头读入图像进行处理。但是我读入我本地的视频文件(avi),我判断了是否获取成功,但是我发现我读入的图像都是空的,不晓得这个原因是什么?

1个回答

读入的方式对不对?没有代码怎么看?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
opencv在vs2010中读入图像问题
#include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc,char** argv){ IplImage* img = cvLoadImage("E:\\lena.jpg"); // Lena.JPEG"图片路径 cvNamedWindow("E:\\lena.jpg",CV_WINDOW_AUTOSIZE); cvShowImage("E:\\lena.jpg",img); cvWaitKey(0); cvReleaseImage(&img); cvDestroyWindow("E:\\lena.jpg");return 0; } 用这段代码就可以显示图像 #include <opencv2\opencv.hpp> #include <iostream> #include <string> using namespace cv; using namespace std; int main() { Mat img = imread("E:\\lena.jpg"); if(img.empty()) { cout<<"error"; return -1; } imshow("李的靓照",img); waitKey(); return 0; } 用这段代码就不能显示图像
OpenCV程序中通过imread()读入图像,发生段错误(Segmentation fault)
程序如下: // ImageDis.cpp #include < opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char* argv[]) { const char* imagename = "kitty.jpg"; //从文件中读入图像 Mat img = imread(imagename); //如果读入图像失败 if(img.empty()) { fprintf(stderr, "Can not load image %s\n", imagename); return -1; } //显示图像 imshow("image", img); //此函数等待按键,按键盘任意键就返回 waitKey(); return 0; } 编译命令如下: g++ -g -o ImageD.exe ImageDis.cpp -I C:\MinGW\include -L C:\MinGW\lib -llibopencv_core341 -llibopencv_highgui341 -llibopencv_imgproc341 -llibopencv_imgcodecs341 运行ImageD.exe发生Appcrach。 用gdb调试: Breakpoint 1, main (argc=1, argv=0x538890) at ImageD.cpp:13 13 Mat img = imread(imagename); 执行line 13时,发生下列错误退出。 Program received signal SIGSEGV, Segmentation fault. 0x6fed4333 in libstdc++-6!_ZNSt6localeaSERKS_ () from C:\MinGW\bin\libstdc++-6.dll
依然opencv 图像输出问题
我用opencv 2.4.10 和VS2010调试下面这个程序总,可以编译通过但是摁F5不能执行,总是显示下面的这句话!(也会出现俩窗口在下面但是第一个窗口提示“assertion failed seize and width”第二个窗口就不是我编程定义的窗口名称,是几个乱麻!)很是无奈了 !我查了很多网站他们说是图片路径的问题!我直接每个文件都Ctrl+V 了那张图片 ,但是还是不行!请问我这种情况是怎么了?难道是我OPENCV不支持Mat类?求解答啊!!! “Unhandled exception at 0x7545969b (KernelBase.dll) in SSSSSSS.exe: Microsoft C++ exception: cv::Exception at memory location 0x001af77c..” ``` #include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main() { // 读入一张图片(游戏原画) Mat img=imread("pic.jpg"); // 创建一个名为 "游戏原画"窗口 namedWindow("游戏原画"); // 在窗口中显示游戏原画 imshow("游戏原画",img); // 等待6000 ms后窗口自动关闭 waitKey(6000); } ```
关于使用opencv读图片的问题
![CSDN移动问答][1]小弟菜菜,在下面的程序中读入一幅图片的像素值后,然后再编译运行,读出来的值就跟上一次的不同了(但相差不多),在第三次至以后编译运行,读出的数值却和第二次相同了。程序最后面有一句保存图像的语句,但想着我没有修改图像啊,只是输出一下而已,为何酱紫啊??大神快快来你快快来... // read_image.cpp : Defines the entry point for the console application. #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "cxcore.h" #include "cxtypes.h" #include<iostream> #include<fstream> using namespace std; int main(int argc, char* argv[]) { IplImage* src=cvLoadImage("F:\\001.jpg",CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR);//以载入图像(原始状态) cvNamedWindow("win"); cvShowImage("win",src); cvWaitKey(0); int x,y; //ofstream f1("pixel_val.txt"); for(y=0;y!=1;y++) { unsigned char* row=(unsigned char*)(src->imageData+y*src->widthStep); for(x=0;x!=24;x++) { cout<<endl; cout<<"x="<<x<<endl; cout<<"before:"<<(int)row[3*x+0]<<" "<<(int)row[3*x+1]<<endl; //f1<<(int)row[3*x+0]<<" "<<(int)row[3*x+1]<<" "<<(int)row[3*x+2]<<endl; } } cvSaveImage("F:\\001.jpg",src);//保存修改过的图片 cvReleaseImage(&src);//释放图像 cvDestroyWindow("win");//释放窗口 return 0; }
opencv读入图片后把图像整体除2,再显示图像,为什么变白了
图像读入的是灰度图像,不是0代表黑,255代表白吗,我把图像整体除2后灰度值变小了,为什么我显示图像变的特别亮,不是应该变暗吗 ![图片说明](https://img-ask.csdn.net/upload/201901/04/1546570777_329796.jpg) ``` img1 = cv2.imread("C:\\Users\\51530\\Desktop\\face\\yaleB\\subset4\\yaleB01_P00A+070E-35.pgm",0) img2 = cv2.imread("C:\\Users\\51530\\Desktop\\face\\yaleB\\subset4\\yaleB01_P00A-050E-40.pgm",0) cv2.imwrite('C:\\Users\\51530\Desktop\photo\\g10.jpg',img1) cv2.imwrite('C:\\Users\\51530\Desktop\photo\\g20.jpg',img2) gimg13 = np.power(img1 / 255.0, 0.3) #gimg13=gimg13*255 gimg15 = np.power(img1 / 255.0, 0.5) gimg15=gimg15*255 gimg23 = np.power(img2 / 255.0, 0.3) gimg23=gimg23*255 gimg25 = np.power(img2 / 255.0, 0.5) gimg25=gimg25*255 cv2.imwrite('C:\\Users\\51530\Desktop\photo\\g13.jpg',gimg13) cv2.imwrite('C:\\Users\\51530\Desktop\photo\\g15.jpg',gimg15) cv2.imwrite('C:\\Users\\51530\Desktop\photo\\g23.jpg',gimg23) cv2.imwrite('C:\\Users\\51530\Desktop\photo\\g25.jpg',gimg25) cv2.imshow("image", gimg13) cv2.waitKey(0) cv2.destroyAllWindows() ``` 现在用gimg13 = np.power(img1 / 255.0, 0.3)来分析,当进行了这条语句后 gimg13要比img1小了很多,照理论上来说图像应该变的特别暗,但是用 cv2.imshow("image", gimg13)时,并不会变暗,注意此时gimg13并没有乘255。但是用imwrite保存后会变暗
想写一个OpenCV的读入图像的代码,但是vs2017报错,问一下哪里有问题,报错内容在图片
``` #include"pch.h" #include<iostream> #include<opencv2/opencv.hpp> using namespace cv; using namespace std; int main() { Mat img = imread("D:/overwatch.png"); imshow("123", img); cout << "ok" << endl; waitKey(0); return 0; } ` ``![图片说明](https://img-ask.csdn.net/upload/201907/28/1564303342_623428.png)
【小白求助】安卓opencv用分类器对人脸进行识别的一些问题
小白入门,最近在看opencv的人脸识别(分类) 然后按照网上的代码,学习了之后,自己写了一段,发现运行的时候会卡很久,甚至直接退出,并且越用越卡。 我想实现的是对一张图片进行读入,然后加载多个分类器对图片内容进行识别,从而达到分类的目的。 我那个问题困扰了我一天,想来求助大神 我加载人脸识别的模型没问题,但是同时加载两个模型,比如说人脸和上身,就会卡死。 代码分3个部分,分别是MainActivity.java , execDetect.java , Detector.java 以下是MainActivity.java ``` package com.RinGo.IMGfenlei; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; public class MainActivity extends AppCompatActivity { private Detector frontfaceDetector; private Detector smileDetector; private static String CAMERAIMAGENAME = "image.jpg"; private ImageButton imageButton; private ImageButton imageButton2; private TextView textView; private Bitmap bitmap; private Bitmap rectBitmap; private Bitmap resizeBitmap; private Toast toast; private Button addFile; private Button startDetect; private Button check; private execDetect toDetcet; private String show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.tv_face); // imageButton = (ImageButton) findViewById(R.id.iv_face); //imageButton.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); // imageButton2 = (ImageButton) findViewById(R.id.iv_face2); // imageButton2.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); toDetcet=new execDetect(); addFile=(Button)findViewById(R.id.addPic); startDetect=(Button)findViewById(R.id.startDetect); check=(Button)findViewById(R.id.check); startDetect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // startDetect.setClickable(false); textView.setText("正在检测"); // detect(); Thread d =new Thread(new Runnable() { @Override public void run() { toDetcet.initExecDetect(MainActivity.this,bitmap); // Toast.makeText(MainActivity.this, "initialize succeed", Toast.LENGTH_SHORT).show(); show= toDetcet.startDetect(); // Toast.makeText(MainActivity.this, " succeed", Toast.LENGTH_SHORT).show(); } }); d.run(); textView.setText(show); // startDetect.setClickable(true); } }); check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // startDetect.setClickable(false); textView.setText(toDetcet.getReturntoMain()); // startDetect.setClickable(true); } }); addFile.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 添加照片 // 打开本地相册 Intent intent1 = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent1, 101); //startActivity(intent1); } }); String strLibraryName = "opencv_java3"; // 不需要添加前缀 libopencv_java3 { try { Log.e("loadLibrary", strLibraryName); System.loadLibrary(strLibraryName); //System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // couldn't find "libopencv_java320.so" } catch (UnsatisfiedLinkError e) { Log.e("loadLibrary", "Native code library failed to load.\n" + e); } catch (Exception e) { Log.e("loadLibrary", "Exception: " + e); } } // frontfaceDetector = new Detector(this, R.raw.haarcascade_frontalface_alt, 6, 0.2F, 0.2F, new Scalar(255, 0, 0, 255)); } /** * 点击添加照片事件 * * @param v */ public void onClick(View v) { int bt_id = v.getId(); switch (bt_id) { /* case R.id.takePhoto: // 拍照 // 打开本地相机 Intent intent2 = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), CAMERAIMAGENAME)); intent2.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent2, 102); break; */ case R.id.back: this.finish(); break; default: break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 加判断 不选择照片或者不拍照时不闪退 //Log.e("data", String.valueOf(data)); //if (data == null) //return; bitmap = null; switch (requestCode) { // 选择图片库的图片 case 101: if (resultCode == RESULT_OK) { try { Uri uri = data.getData(); bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); } catch (Exception e) { e.printStackTrace(); } } break; // 表示调用本地照相机拍照 case 102: if (resultCode == RESULT_OK) { //Bundle bundle = data.getExtras(); //bm = (Bitmap) bundle.get("data"); bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/" + CAMERAIMAGENAME); } break; default: break; } Log.e("bitmap", String.valueOf(bitmap)); if (bitmap == null) { toast = Toast.makeText(MainActivity.this, "未选择图像", Toast.LENGTH_SHORT); toast.show(); return; } // 识别图片 并画框 /* Thread detect=new Thread(new Runnable() { @Override public void run() { } }); detect.run(); */ // 将照片剪裁 bitmap将被释放重新赋值 //int ibWidth = imageButton.getWidth(); // int ibHeight = imageButton.getHeight(); //resizeBitmap = imageButton.resizeBitmap(bitmap, ibWidth, ibHeight); //imageButton.setBitmap(resizeBitmap); //imageButton2.setBitmap(rectBitmap); } private void detect() { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { toDetcet.initExecDetect(MainActivity.this,bitmap); // Toast.makeText(MainActivity.this, "initialize succeed", Toast.LENGTH_SHORT).show(); String show= toDetcet.startDetect(); // Toast.makeText(MainActivity.this, " succeed", Toast.LENGTH_SHORT).show(); textView.setText(show); } }); //textView.setText(toDetcet.getReturntoMain()); } } ``` 以下是activity_main.xml ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_face" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="未检测到人脸" android:textColor="@color/colorAccent" app:layout_constraintBottom_toTopOf="@+id/ll1" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <LinearLayout android:id="@+id/ll1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/addPic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="1" android:onClick="onClick" android:text=" 选择图片(CV) " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/startDetect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="1" android:onClick="onClick" android:text=" 开始识别 " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="1" android:onClick="onClick" android:text=" 结果 " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="0dp" android:layout_weight="1" android:onClick="onClick" android:text=" 返回 " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> </LinearLayout> </LinearLayout> ``` 以下是execDetect.java ``` package com.RinGo.IMGfenlei; import android.content.Context; import android.graphics.Bitmap; import android.util.Log; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; import com.RinGo.IMGfenlei.R; import com.RinGo.IMGfenlei.Detector; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; public class execDetect { private Detector frontfaceDetector; private Detector smilefaceDetector; private Detector[] detectors=new Detector[10]; private Detector detector; private Bitmap bitmap; private Bitmap rectBitmap; private String returntoMain=""; private String[] detectorNames=new String[10]; private CascadeClassifier mFrontalFaceClassifier = null; //正脸 级联分类器 private CascadeClassifier mProfileFaceClassifier = null; //侧脸 级联分类器 private int smilefacenum=0; private Context mcontext; private int[] cascades=new int[10]; public void initExecDetect(Context _context,Bitmap _bitmap) { bitmap=_bitmap; mcontext=_context; cascades[0]=R.raw.haarcascade_frontalface_alt; detectors[0] = new Detector(_context,R.raw.haarcascade_frontalface_alt, 1, 0.2F, 0.2F, new Scalar(255, 0, 0, 255)); detectorNames[0]="正面人脸"; cascades[1]=R.raw.lbpcascade_frontalface; detectors[1] = new Detector(_context,R.raw.lbpcascade_frontalface, 1, 0.2F, 0.2F, new Scalar(255, 0, 0, 255)); detectorNames[1]="正面人脸2"; } public String startDetect() { // bitmapToMat Mat toMat = new Mat(); Utils.bitmapToMat(bitmap, toMat); // Mat copyMat = new Mat(); // toMat.copyTo(copyMat); // 复制 // togray Mat gray = new Mat(); MatOfRect mRect = new MatOfRect(); Imgproc.cvtColor(toMat, gray, Imgproc.COLOR_RGBA2GRAY); for (int id = 0; id < detectors.length; id++) { //detector = new Detector(mcontext,cascades[id], 3, 0.1F, 0.1F, new Scalar(255, 0, 0, 255)); try { int num = 0; mRect=new MatOfRect(); Rect[] object = detectors[id].detectObjectImage( gray, mRect); Log.e("objectLength", object.length + ""); num=object.length; /* for (Rect rect : object) { num++; } */ returntoMain =returntoMain+ String.format("检测到%1$d个" + detectorNames[id], num) + "\n"; } catch (Exception e) { e.printStackTrace(); } //textView.setText(String.format("检测到%1$d个人脸", facenum)); //Utils.matToBitmap(toMat, bitmap); } return returntoMain; } public String getReturntoMain() { return returntoMain; } } ``` 以下是Detector.java,定义了我的级联分类器的设置 ``` package com.RinGo.IMGfenlei; import android.content.Context; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.objdetect.CascadeClassifier; import org.opencv.objdetect.Objdetect; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; /** * Created by think-hxr on 17-10-12. */ public class Detector { private CascadeClassifier mCascadeClassifier; private int mMinNeighbors; private float mRelativeObjectWidth; private float mRelativeObjectHeight; private Scalar mRectColor; /** * 构造方法 * * @param context 上下文 * @param id 级联分类器ID * @param minNeighbors 连续几帧确认目标 * @param relativeObjectWidth 最小宽度屏占比 * @param relativeObjectHeight 最小高度屏占比 * @param rectColor 画笔颜色 */ public Detector(Context context, int id, int minNeighbors, float relativeObjectWidth, float relativeObjectHeight, Scalar rectColor) { context = context.getApplicationContext(); mCascadeClassifier = createDetector(context, id); mMinNeighbors = minNeighbors; mRelativeObjectWidth = relativeObjectWidth; mRelativeObjectHeight = relativeObjectHeight; mRectColor = rectColor; } /** * 创建检测器 * * @param context 上下文 * @param id 级联分类器ID * @return 检测器 */ private CascadeClassifier createDetector(Context context, int id) { CascadeClassifier javaDetector; InputStream is = null; FileOutputStream os = null; try { is = context.getResources().openRawResource(id); File cascadeDir = context.getDir("cascade", Context.MODE_PRIVATE); File cascadeFile = new File(cascadeDir, id + ".xml"); os = new FileOutputStream(cascadeFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } javaDetector = new CascadeClassifier(cascadeFile.getAbsolutePath()); //javaDetector=new CascadeClassifier(); // javaDetector.load(cascadeFile.getAbsolutePath()); if (javaDetector.empty()) { javaDetector = null; } boolean delete = cascadeDir.delete(); return javaDetector; } catch (IOException e) { e.printStackTrace(); return null; } finally { try { if (null != is) { is.close(); } if (null != os) { os.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 目标检测 视频 * * @param gray 灰度图像 * @param object 识别结果的容器 * @return 检测到的目标位置集合 */ public Rect[] detectObject(Mat gray, MatOfRect object) { // 使用Java人脸检测 mCascadeClassifier.detectMultiScale( gray, // 要检查的灰度图像 object, // 检测到的人脸 1.1, // 表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%; mMinNeighbors, // 默认是3 控制误检测,表示默认几次重叠检测到人脸,才认为人脸存在 Objdetect.CASCADE_SCALE_IMAGE, getSize(gray, mRelativeObjectWidth, mRelativeObjectHeight), // 目标最小可能的大小 gray.size()); // 目标最大可能的大小 return object.toArray(); } /** * 目标检测 图片 * * @param gray 灰度图像 * @param object 识别结果的容器 * @return */ public Rect[] detectObjectImage(Mat gray, MatOfRect object) { mCascadeClassifier.detectMultiScale(gray,object); return object.toArray(); } /** * 根据屏占比获取大小 * * @param gray gray * @param relativeObjectWidth 最小宽度屏占比 * @param relativeObjectHeight 最小高度屏占比 * @return 大小 */ private Size getSize(Mat gray, float relativeObjectWidth, float relativeObjectHeight) { Size size = gray.size(); int cameraWidth = gray.cols(); int cameraHeight = gray.rows(); int width = Math.round(cameraWidth * relativeObjectWidth); int height = Math.round(cameraHeight * relativeObjectHeight); size.width = 0 >= width ? 0 : (cameraWidth < width ? cameraWidth : width); // width [0, cameraWidth] size.height = 0 >= height ? 0 : (cameraHeight < height ? cameraHeight : height); // height [0, cameraHeight] return size; } /** * 获取画笔颜色 * * @return 颜色 */ public Scalar getRectColor() { return mRectColor; } } ```
OpenCV中用mat类采集视频成功,但是不知道如何保存视频,求大神添加代码,急用,谢谢!
OpenCV中用mat类采集视频成功,但是不知道如何保存视频,求大神添加代码,急用,谢谢! ``` #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; string name = "Mine"; int main() { VideoCapture capture; //声明视频读入类 capture.open(0); //从摄像头读入视频 0表示从摄像头读入 if (!capture.isOpened()) //先判断是否打开摄像头 { cout << "can not open"; cin.get(); return -1; } namedWindow(name); while (1) { Mat cap; //定义一个Mat变量,用于存储每一帧的图像 capture >> cap; //读取当前帧 if (!cap.empty()) //判断当前帧是否捕捉成功 **这步很重要 imshow(name, cap); //若当前帧捕捉成功,显示 else cout << "can not "; waitKey(30); //延时30毫秒 } return 0; } ```
用cmake编译opencv3.4.0后无法找到opencv_world340.lib 的问题
按照网上给的操作做到了最后一部添加依赖项的时候要求添加”opencv_ts340.lib opencv_world340.lib “这些文件,然而惊讶的发现x86->vc11-lib里面没有这些文件,只有其它的lib。怎么办呢?编译都显示成功的呀。 以下是试运行的代码 #include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main() { // 读入一张图片(游戏原画) Mat img = imread("pic.jpg"); // 创建一个名为 "游戏原画"窗口 namedWindow("游戏原画"); // 在窗口中显示游戏原画 imshow("游戏原画", img); // 等待6000 ms后窗口自动关闭 waitKey(6000); }
opencv刚配置好,编译出错(求大神们~)
opencv3.0刚配置好,输入了一个简单程序 #include "stdafx.h" #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char* argv[]) { const char* imagename = "emosue.jpg"; //从文件中读入图像 Mat img = imread(imagename); //如果读入图像失败 if(img.empty()) { fprintf(stderr, "Can not load image %s\n", imagename); return -1; } //显示图像 imshow("image", img); //此函数等待按键,按键盘任意键就返回 waitKey(); return 0; } 但编译出错 fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory 为什么5555~,求大神指导一下,万分感谢
c++,用VC6与opencv目前只想把图像显示出来,语法没错但无法显示,有什么问题求教大神
实验5 类和对象 实验目的 掌握类和对象的创建 掌握构造函数、构造函数的重载,拷贝构造函数、析构函数的设计和使用 掌握成员函数的设计和使用 实验内容 下面的代码已经创建了图像类的框架,请完善该图像类。在该类中,实现图像的读入、保存、显示,并实现图像的翻转、缩放、裁剪等操作。在主程序中,读入某个图像文件(比如“fruits.jpg”) ,对其进行缩小,上下翻转,左右翻转,指定区域裁剪等操作。 [使用多文件结构设计该类,即类的声明代码在.h文件中,类的实现代码在.cpp文件中,main函数的代码在另一个.cpp文件中。] 请编程实现: 图像类: 1.创建图像类Image,实现各个重载的构造函数,拷贝构造函数(深拷贝),析构函数。 2.实现对图像的读入,保存,显示。即实现函数Read,Show,Write。 3.获取图像中某像素点的值。即实现函数At()。 4.将图像中给定像素点的像素值设置为某值,即实现函数Set。将图像所有像素的像素值设定为某值,即实现函数SetAll。 5.同一个函数实现图像的上下翻转、左右翻转。即实现函数Flip。 6.根据指定区域裁剪图像。 7.求图像的均值,方差。 8.图像的旋转,缩放。 9.定义友元函数交换两个Image对象的数据。 在函数中实现: 10.创建Image类对象img。 11.读入文件中的图像“fruits.jpg”,并显示。 12.利用Image类的成员函数,对图像进行翻转、旋转,并显示。 13.利用Image类的成员函数,将图像长宽缩小到1/2大小,并显示;将图像长宽放大2倍,并显示。 14.利用拷贝构造函数,创建新的对象new_img。 15.给定的两个点(Point):左上点(top_left)和右下点(bottom_right),将此指定区域内的new_img对象图像进行裁剪操作,并显示结果。 16.求图像的所有像素点的均值和方差,并输出。 17.交换两个Image对象的数据。 Image.h #ifndef IMAGE_H #define IMAGE_H class Image { public: Image(); //无参数的构造函数,创建行列都为零的Image对象 Image(int h, int w); //构造函数重载,创建h行,w列的Image对象 Image(int h, int w, unsigned char val); //构造函数重载,创建的图像像素值都为val; Image(char* ImageName); //构造函数重载,利用文件名从硬盘加载图像文件成为Image对象; Image(unsigned char *m, int rows, int cols); //构造函数重载,从一维静态数组创建Image对象,图像的行数和列数由后面两个参数给出; Image(unsigned char m[][100], int rows); //构造函数重载,从静态二维数组创建Image对象,图像的行数(二维数组的第一个维度)由第二个参数rows给出; Image(unsigned char **m, int h, int w); //构造函数重载,从动态数组(二级指针)创建Image对象,图像的行数和列数由后面两个参数给出; Image(const Image &im); //拷贝构造函数; ~Image(); //析构函数; void Read(char* ImageName); //从硬盘文件中读入图像数据; void Write(char* filename); //将图像数据保存为图像文件; void Show(char* winname); //显示图像; unsigned char& At(int row, int col); //获取第row行第col列的像素点的值; void Set(int row, int col, unsigned char value); //设置像素(row,col)为某值; void SetAll(unsigned char value); //设置图像所有像素为同一值; void Flip(int code); //图像的翻转; 根据code的值:0:左右翻转,1:上下翻转; void Resize(int code); //图像的缩放;根据code的值:0:缩小一倍,1:放大一倍; void Cut(int x1,int y1,int x2,int y2);//裁剪点(x1,y1)到点(x2,y2)的图像 void Rotate(int degree);//图像旋转的函数(简单起见,旋转角度为90度的整数倍) void Mean_Variance(float &m, float &var);//求图像的均值和方差,利用参数输出 friend void Swap(Image &a, Image &b);//使用友元函数交换两个Image对象的数据 private: unsigned char **data; int height; int width; }; #endif Image.cpp #include "cv.h" #include "highgui.h" #include "Image.h" //构造函数 Image::Image() { //write your code here } //构造函数重载 Image::Image(int h, int w) { //write your code here } // 其他重载构造函数的实现 // ...... //拷贝构造函数 Image::Image(const Image &im) { //write your code here } //析构函数 Image::~Image() { //write your code here } //从硬盘读入图像文件; void Image::Read(char* ImageName) { IplImage* img = cvLoadImage(ImageName, CV_LOAD_IMAGE_GRAYSCALE); unsigned char *img_data = (unsigned char *)(img->imageData); int widthstep = img->widthStep; //将一维指针img_data指向的内存中的值写入成员变量二维指针data所指的内存中 //write your code here cvReleaseImage(&img); } //保存图像; void Image::Write(char filename) { IplImage img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1); unsigned char *img_data = (unsigned char *)(img->imageData); int widthstep = img->widthStep; //将成员变量二维指针data所指内存中的值写入一维指针img_data所指的内存 //write your code here cvSaveImage(filename, img); cvReleaseImage(&img); } //显示图像; void Image::Show(char *winname) { IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1); unsigned char *img_data = (unsigned char *)(img->imageData); int widthstep = img->widthStep; //将data所指内存中的值写入img_data所指的内存 //write your code here cvNamedWindow(winname, CV_WINDOW_AUTOSIZE);//创建窗口 cvShowImage(winname, img); cvWaitKey(0); cvReleaseImage(&img); //释放图像; } //获取图像中指定点的值 unsigned char& Image::At(int row, int col) { //write your code here } //设置图像为同一值 void Image::Set(unsigned char value) { //write your code here } //false 左右,true 上下; void Image::Flip(int code) { //write your code here } //图像缩小,放大 void Image::Resize(int code) { //write your code here } //图像裁剪的函数 //图像旋转的函数 //write your code here //实现友元函数,交换两个Image对象的数据 void Swap(Image &a, Image &b) { } CppExp.cpp #include “Image.h” int main(int argc, char* argv[]) { Image img; //创建对象 img.Read("Fruits.jpg"); //img.Write("FruitsCopy.jpg"); cvNamedWindow("Image", CV_WINDOW_AUTOSIZE); img.Show("Image"); cvWaitKey(0); //等待按键 //write your code here //实现图像的左右翻转,如img.Flip(true);并显示 //实现图像的上下翻转,显示 //实现图像的缩放,显示 //获取图像的某点的像素值,并修改 //使用拷贝构造函数创建新的对象 Image new_img(img); //截取指定区域内的图像,并显示 //旋转图像并显示(简单起见,旋转角度为90度的整数倍) //求图像的均值和方差,并在命令行输出 //交换两个图像的数据 Image img1("Baboon.jpg"); Image img2("Lena.jpg"); img1.Show("Image1"); img2.Show("Image2"); cvWaitKey(0); //等待按键 Swap(img1, img2); img1.Show("Image1"); img2.Show("Image2"); cvWaitKey(0); //等待按键 return 0; } 实验要求 完成上述代码,并能显示正确的结果图像。 下面是我自己编写的代码: #include "cv.h" #include "highgui.h" #include "Image.h" #include<iostream.h> Image::Image() //无参数的构造函数,创建行列都为零的Image对象 { width=0; height=0; } Image::Image(int h, int w)//构造函数重载,创建h行,w列的Image对象 { height=h; width=w; } Image::Image(char* ImageName) { IplImage* img = cvLoadImage("Fruits.jpg", CV_LOAD_IMAGE_GRAYSCALE); } Image::DrawPixel(IplImage* img,int row, int col, unsigned char v) { unsigned char *img_data = (unsigned char *)(img->imageData); int width_step = img->widthStep; img_data[width_step * row + col] = v; } Image::Image(IplImage *img, int height, int width, unsigned char val) { int a,b; for(a=0;a<=height-1;a++) { for(b=0;b<=width-1;b++) { DrawPixel(img,a,b,val); } } return; } /*Image::Image(IplImage *img) { unsigned char *img_data = (unsigned char *)(img->imageData); int height=img->height; int width=img->width; int x; unsigned char **a; //动态声明一个二维数组 a=new unsigned char *[height]; a[0] =new unsigned char[height * width]; for (x=1;x<height;x++) { a[x]=a[x-1]+width; } }*/ void Image::Read(char* ImageName,unsigned char **a) { IplImage* img = cvLoadImage(ImageName, CV_LOAD_IMAGE_GRAYSCALE); unsigned char *img_data = (unsigned char *)(img->imageData); int widthstep = img->widthStep; int height=img->height; int width=img->width; cout<<height; //unsigned char **a; int x,y,z=0; for(x=0;x<width;x++) { for(y=0;y<height;y++) { a[x][y]=img_data[z]; z++; } } for(int i = 0;i < height;i++) { delete a[i]; a[i] = NULL; } delete [height]a; a = NULL; cvReleaseImage(&img); } void Image::Write(char *filename) { IplImage* img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1); unsigned char *img_data = (unsigned char *)(img->imageData); int widthstep = img->widthStep; int height=img->height; int width=img->width; unsigned char **a; int x,y,z=0; for (x=0;x<width;x++) { for (y=0;y<height;y++) { img_data[z]=a[x][y]; z++; } } cvSaveImage(filename, img); cvReleaseImage(&img); } void Image::Show(char *winname) { IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1); unsigned char *img_data = (unsigned char *)(img->imageData); int widthstep = img->widthStep; int height=img->height; int width=img->width; unsigned char **a; int x,y,z=0; for (x=0;x<width;x++) { for (y=0;y<height;y++) { img_data[z]=a[x][y]; z++; } } cvNamedWindow(winname, CV_WINDOW_AUTOSIZE);//创建窗口 cvShowImage(winname, img); cvWaitKey(0); cvReleaseImage(&img); //释放图像; }; Image::~Image() { //write your code here } int main(int argc, char* argv[]) { Image img; //创建对象 IplImage* img1 = cvLoadImage("Fruits.jpg", CV_LOAD_IMAGE_GRAYSCALE); unsigned char *img1_data = (unsigned char *)(img1->imageData); int height=img1->height; int width=img1->width; int x; unsigned char **a; //动态声明一个二维数组 a=new unsigned char *[height]; a[0] =new unsigned char[height * width]; for (x=1;x<height;x++) { a[x]=a[x-1]+width; } Image("Fruits.jpg"); img.Read("Fruits.jpg",a); //img.Write("FruitsCopy.jpg"); //cvNamedWindow("Image", CV_WINDOW_AUTOSIZE); //img.Show("Image"); //cvWaitKey(0); //等待按键 return 0; } 结果是这样的,为什么呢,我只想先把图像显示出来: ![图片说明](https://img-ask.csdn.net/upload/201604/30/1461986867_53649.png)
opencv 一段代码出错了
显示.exe停止工作,但是去掉那个for循环就可以运行,是ptr<>的使用不当吗 #include<iostream> #include<cmath> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; int main() { // 读入一张图片 Mat img = imread("F:/vsprogram/projecttest/01.jpg"); // 创建一个名为 "picture"窗口 namedWindow("picture"); //创建一个等大图像 Mat new_img(img.rows,img.cols,CV_8UC3); //row 行height for (int j= 0; j<img.rows; j++) { for (int i = 0; i < img.cols; i++) { int y=j; int x = i; new_img.ptr<float>(y)[x] = img.ptr<float>(j)[i]; } } // 在窗口中显示原画 imshow("picture", new_img); // 等待6000 ms后窗口自动关闭 waitKey(6000); }
opencv中的imread函数问题
为什么使用imread函数时候,第二个参数的设置会最终影响是否能读入图片?比如jpg的用1的时候可以,用0的时候就说内存泄漏?但是用0不应该是强制转换成灰度图像?这真的必须按规定值使用吗?
如何使用opencv的Java接口中的Core.dft()函数来实现图像的傅里叶变换?
opencv中的dft()函数网上只找到了c++接口的,部分代码: Mat padded; //expand input image to optimal size int m = getOptimalDFTSize( I.rows ); int n = getOptimalDFTSize( I.cols ); // on the border add zero values copyMakeBorder(I, padded, 0, m - I.rows, 0, n - I.cols, BORDER_CONSTANT, Scalar::all(0)); Mat planes[] = {Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F)}; Mat complexI; merge(planes, 2, complexI); // Add to the expanded another plane with zeros dft(complexI, complexI); // this way the result may fit in the source matrix 链接:http://www.blogbus.com/shijuanfeng-logs/222165953.html 现在需要一个在Android上可以实现的Java代码,我尝试着按上面那个c++代码搬到Java中,代码如下: Mat bmMat = new Mat(); Utils.bitmapToMat(bm, bmMat); //bm是已经读入了的bitmap,将其转换成Mat Mat pad=new Mat(); MatOfFloat padded = new MatOfFloat(); int m = Core.getOptimalDFTSize(bmMat.rows()); int n = Core.getOptimalDFTSize(bmMat.cols()); Imgproc.copyMakeBorder(bmMat, pad, 0, m - bmMat.rows(), 0, n- bmMat.cols(),Imgproc.BORDER_CONSTANT, Scalar.all(0)); padded=(MatOfFloat)pad; Mat[] userid = { padded, Mat.zeros(padded.size(), CvType.CV_32F) }; List<Mat> planes = Arrays.asList(userid); Mat complexI = new Mat(); Core.merge(planes, complexI); Core.dft(complexI, complexI); 可是运行失败,我感觉是c++中Mat_<float>(padded)和Java中MatOfFloat这一块没有对应上,所以出现了问题。求大神解答,谢谢!!!
vs+opencv调用同一usb口的两路摄像头
买了一个双目摄像头,只有一个usb口那种,支持两路设备识别和输出,我单独调用任何一路都能输出图像,但是同时调用两路显示时,第二路总是打不开,有没有哪个大佬遇到过相似的问题?怎么解决的呢? 附上我的代码: #include<opencv2/opencv.hpp> #include<cv.h> using namespace cv; using namespace std; int main() { //【1】从摄像头读入视频 VideoCapture capture(2); if(!capture.isOpened()) {cout<< "cannot open the camera.";cin.get();return -1;} VideoCapture capture1(1); if (!capture1.isOpened()) { cout << "cannot open the camera1."; cin.get(); return -1; } while (1) { Mat frame; //定义一个Mat变量,用于存储每一帧的图像 Mat frame1; //定义一个Mat变量,用于存储每一帧的图像 capture >> frame; //读取当前帧 if (frame.empty()) { printf("--(!) No captured frame -- Break!"); //break; } else { imshow("原图", frame); //显示当前帧 } capture1 >> frame1; //读取当前帧 if (frame1.empty()) { printf("--(!) No captured frame1 -- Break\r\n"); //break; } else { imshow("原图1", frame1); //显示当前帧 } waitKey(30); //延时30ms } return 0; }
MFC程序运行后按键响应的问题
写的是一个类似视频播放功能的程序(现在写的这段只要具备这个功能,后期还要加上图像处理,暂且就当是个播放器吧) 按下start后,读入视频,是使用opencv的,在按键响应的代码块里,代码如下: std::string videoFile = "d:/123.mp4"; cv::VideoCapture capture; capture.open(videoFile); if (!capture.isOpened()){ MessageBox("capture is not opened"); } cv::Mat frame; //每一帧的图像 long frameNo = 0; while (capture.read(frame)){ frameNo++; //记录帧数 IplImage ImgForShow = frame; IplImage* pShow = &ImgForShow; DrawPicToHDC(pShow, IDC_STATIC2); //IDC_STATIC2是用于显示的控件 } DrawPicToHDC函数应该没什么问题,图片都能正常显示,需要的话我再贴吧,篇幅不够 问题:按下start的按键后,视频正常播放,但是在播放完成前,任何按键都无法响应。而我需要做一个暂停、停止的按键。怎么让他响应一下?
win10 VS2015 opencv3.1.0 应用程序无法正常启动(0xc0000007b)
_1.下图为环境变量的设置图片说明](https://img-ask.csdn.net/upload/201603/30/1459315234_989848.png)._ 2.下图为VS2015的配置 ![图片说明](https://img-ask.csdn.net/upload/201603/30/1459315444_677180.png) ![图片说明](https://img-ask.csdn.net/upload/201603/30/1459315489_403990.png) ![图片说明](https://img-ask.csdn.net/upload/201603/30/1459315498_484539.png) 3.下面是程序代码 **#include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char* argv[]) { const char* imagename = "G:\\VS2015\\ConsoleApplication1\\ConsoleApplication1\\tulips.jpg"; //从文件中读入图像 Mat img = imread(imagename); //如果读入图像失败 if (img.empty()) { fprintf(stderr, "Can not load image %s\n", imagename); return -1; } //显示图像 imshow("image", img); //此函数等待按键,按键盘任意键就返回 waitKey(); return 0; }** 4.下面是出错信息 ****“ConsoleApplication1.exe”(Win32): 已加载“G:\VS2015\ConsoleApplication1\x64\Release\ConsoleApplication1.exe”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\ntdll.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\kernel32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\KernelBase.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\vcruntime140.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\opencv_world310d.dll”。无法查找或打开 PDB 文件。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\ucrtbase.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\ucrtbase.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\advapi32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已卸载“C:\Windows\System32\ucrtbase.dll” “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\msvcrt.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\sechost.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\rpcrt4.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\user32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\gdi32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\ole32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\combase.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\cryptbase.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\bcryptprimitives.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\oleaut32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\comdlg32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\SHCore.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\shlwapi.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\shell32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\cfgmgr32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10586.0_none_396e892957c7fb25\comctl32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\windows.storage.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\kernel.appcore.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\powrprof.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\profapi.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\FirewallAPI.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\netapi32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\avicap32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\msvfw32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\avifil32.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\msvcp120d.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已卸载“C:\Windows\System32\msvcp120d.dll” “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\winmm.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\winmmbase.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\davhlpr.dll”。已加载符号。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\System32\MSVCR120D.dll”。已加载符号。 线程 0xab0 已退出,返回值为 -1073741701 (0xc000007b)。 线程 0x1f54 已退出,返回值为 -1073741701 (0xc000007b)。 线程 0x29d4 已退出,返回值为 -1073741701 (0xc000007b)。 程序“[2452] ConsoleApplication1.exe”已退出,返回值为 -1073741701 (0xc000007b)。 **** ![图片说明](https://img-ask.csdn.net/upload/201603/30/1459315709_869272.png)
opencv视频边界检测,哪个大神知道这是什么算法啊啊啊,好急
#include "cv.h" #include "highgui.h" #include<iostream> #include<fstream> #include<math.h> using namespace std; int window=15; float LimenValue(float *comhist,int num)//阈值 { float mean = 0; float sum = 0; float T; float max; float min; float mmax = 0; float mmin = 0; float summin = 0; float summax = 0; float mincount = 0; float maxcount = 0; float median; float factor = 4; int i = 0; max = comhist [num]; min = comhist [num]; for( i = 0;i<window;i++) { sum +=comhist[num+i]; if(comhist[num+i]>max) { max = comhist[num+i]; } if(comhist[num+i]<min) { min = comhist[num+i]; } } mean = sum / window; median = (max +min) / 2; //计算大小两集合均值 for (i = 0;i< window;i++) { if (comhist[num+i] <= median) { summin +=comhist[num+i]; mincount++; } else { summax +=comhist[num+i]; maxcount++; } } mmin = summin / mincount; mmax = summax / maxcount; //计算是否有突变,返回阈值 if(fabs(mmax-mmin)>(factor*mean)) //如果 |mmax - mmin | > (Factor*mean)为真 T = (mmin+mmax * 2) / 3; //T = (mmin + mmax * 2) / 3作为阈值 else T = max + 10; return T; } float LimenValue2(float * comhist, int num1, int num2) { float avervalue = 0; //均值 float variance = 0; //方差 float sum = 0; //和 float squaresum = 0; //差值平方的和x float limen; int num = num2 - num1 + 1; for(int i = num1; i<= num2; i++) { sum += comhist[i]; squaresum += comhist[i] * comhist[i]; } avervalue = sum / num; variance = squaresum / num - avervalue*avervalue; limen = avervalue + 30*variance; return limen; } int main(int argc, char** argv) { CvCapture * capture = NULL; //设置读取视频数据的指针 IplImage * Frame = NULL; IplImage * preFrame = NULL; //前一帧 IplImage * frame1 = NULL; IplImage * frame2 =NULL; int HistogramBins = 256; float HistogramRange1[2] = {0,255}; float * HistogramRange[1] = {&HistogramRange1[0]}; char * aviname = "F://视频//2.MP4"; //输入视频 char filename[3000]; //保存图片时用的变量 int totalFrmNum; //总帧数 int nFrmNum = 0; float * pCompareHist; //存放所有相邻帧间直方图差值的指针 int * sceneframe; //镜头突变处,后一镜头第一帧表示//int * keyframe; float fLimenValue; //阈值 float fLimenValue2; int scenecount = 0; cvNamedWindow("新闻视频",CV_WINDOW_AUTOSIZE);//读入视频 capture = cvCaptureFromAVI(aviname); totalFrmNum =(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT)-1; if(!capture) { fprintf(stderr,"Could not initialize capturing...\n"); return -1; } while(Frame = cvQueryFrame( capture)) { sprintf(filename,"allframe/%d.jpg",nFrmNum); cvSaveImage(filename, Frame); nFrmNum++; cvShowImage("新闻视频",Frame); cvWaitKey(5) ; } cvReleaseCapture(&capture); cvDestroyWindow("新闻视频"); //创建直方图 CvHistogram*Histogram=cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange); CvHistogram*Histogram2=cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange); //计算相邻帧间直方图差值 pCompareHist = new float [totalFrmNum]; float CompareHist = 0; pCompareHist[0] = 0; capture = cvCaptureFromAVI(aviname); nFrmNum = 0; while (Frame = cvQueryFrame(capture)) { if (nFrmNum==0) { frame1 = cvCreateImage(cvSize(Frame->width,Frame->height),IPL_DEPTH_8U,1); frame2 = cvCreateImage(cvSize(Frame->width,Frame->height),IPL_DEPTH_8U,1); } else if(nFrmNum > 1) { cvCvtColor(Frame,frame1,CV_BGR2GRAY); cvCvtColor(preFrame,frame2,CV_BGR2GRAY); cvCalcHist(&frame1,Histogram,0,0);//计算当前帧的直方图 cvCalcHist(&frame2,Histogram2,0,0);//计算前一帧的直方图 //直方图归一化 cvNormalizeHist(Histogram,1); cvNormalizeHist(Histogram2,1); //计算当前帧与前一帧的直方图差 CompareHist = (float)cvCompareHist(Histogram,Histogram2,CV_COMP_CHISQR); pCompareHist[nFrmNum-1] = CompareHist; } preFrame = cvCloneImage(Frame); nFrmNum++; } //释放图像和矩阵 cvReleaseCapture(&capture); cvReleaseImage(&Frame); cvReleaseImage(&frame1); cvReleaseImage(&frame2); cvReleaseHist(&Histogram); cvReleaseHist(&Histogram2); printf("镜头突变处帧:\n"); sceneframe = new int[totalFrmNum]; //计算突变帧 for (int i = 0; i < (totalFrmNum - (totalFrmNum%window));) { fLimenValue = LimenValue(pCompareHist,1); for (int j = 0; j < window; j++) { if (pCompareHist[i+j] > fLimenValue) { printf("%d,",i+j+1); /*cvNamedWindow("突变帧",CV_WINDOW_AUTOSIZE); cvShowImage("突变帧",sceneframe); cvDestroyWindow("突变帧"); cvReleaseImage;*/ sceneframe[scenecount] = i+j+1; scenecount++; } } i +=window; } scenecount++; //保存pCompareHist数组到CompareHist.txt文件中 //保存sceneframe数组到SceneFrame.txt文件中 fstream out1; out1.open("CompareHist.txt",ios::out); if (!out1) { cerr<<"CompareHist.txt can not open.\n"; abort(); } for (int i = 0; i < totalFrmNum; i++) { out1<<pCompareHist[i]; out1<<"\n"; } out1.close(); out1.open("ScenceFrame.txt",ios::out); if (!out1) { cerr<<"ScenceFrame.txt can not open.\n"; abort(); } for (int i = 0; i < scenecount-1; i++) { out1<<sceneframe[i]; out1<<"\n"; } out1.close(); //保存突变帧 int count = 0; nFrmNum = 0; capture = cvCreateFileCapture(aviname); while (Frame = cvQueryFrame( capture)) { if (nFrmNum == sceneframe[count]) { sprintf(filename,"sceneframe/%d.jpg",nFrmNum); cvSaveImage(filename, Frame); count++; } nFrmNum++; } cvReleaseCapture(&capture);
vs2010 MFC opencv下面的例子中第4行为什么不可行?
//从文件中读入图像 1 AfxMessageBox(strPathName); //D:\demo\1.jpg 2 strPathName.Replace(_T("\\\"),_T("\\\\\\\")); 3 AfxMessageBox(strPathName); //D:\\\demo\\\1.jpg 4 Mat img = imread("strPathName"); //运行报错 如果Mat img = imread("D:\\\demo\\\1.jpg"); //运行正确 imshow("image before", img);
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
我是Leader,我被降职成了普通员工,HR说:公司要梯队年轻化
“BAT也不是完美的避风港哇~”这是老刘说的,老刘是BAT某家的一个Leader,职级约类似T7(T族一般是技术族,管理是M族),在BAT某家呆了11年,但是在整个互联网行业推崇,梯队年轻化的氛围时,老刘所在的业务线,产品数据并不是太好看。于是前段时间被约谈了,只是从Leader变成了一线技术,薪水没太大变化,但是已经不是管理层队伍了,团队里的更年轻的人成了他的汇报对象,在这种职场角色反转的事情,...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
小白学 Python 爬虫(25):爬取股票信息
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(...
这三名男子靠开加密矿池获得7.22 亿美元,却不兑现收益拿去奢侈挥霍……
来源 /cointelegraph编译/火火酱责编 / Carol出品 / 区块链大本营(blockchain_camp)根据美国司法部12月10日发布的声明,美国新泽西州当局宣布...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
2019年还剩1天,我从外包公司离职了
这日子过的可真快啊,2019年还剩1天,外包公司干了不到3个月,我离职了
只因接了一个电话,程序员被骗 30 万!
今天想给大家说一个刚刚发生在我身边的一起真实的诈骗经历,我的朋友因此被骗走30万。注:为了保护当事人隐私,部分情节进行了修改。1平安夜突来的电话开始以为就像普通的诈骗一样,想办法让你把钱...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
面试官刁难:Java字符串可以引用传递吗?
老读者都知道了,六年前,我从苏州回到洛阳,抱着一幅“海归”的心态,投了不少简历,也“约谈”了不少面试官,但仅有两三个令我感到满意。其中有一位叫老马,至今还活在我的手机通讯录里。他当时扔了一个面试题把我砸懵了:“王二,Java 字符串可以引用传递吗?” 我当时二十三岁,正值青春年华,从事 Java 编程已有 N 年经验(N &lt; 4),自认为所有的面试题都能对答如流,结果没想到啊,被“刁难”了—...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
(总结)阿里面试问了ArrayList,都问了啥?
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
立即提问