有没有一种可能的方式,使用opencv拍摄显示图像的图片以及算法的输出?像this,但这种方法是使用屏幕截图(powr + vol dwn),这是不高效的。使用颜色斑点检测器拍摄图像Opencv
我想包括颜色斑点检测的输出。我已经完成了截图方法,但问题是它总是黑色的,可能是因为在opencv中获取图像的方法不同。
有没有一种可能的方式,使用opencv拍摄显示图像的图片以及算法的输出?像this,但这种方法是使用屏幕截图(powr + vol dwn),这是不高效的。使用颜色斑点检测器拍摄图像Opencv
我想包括颜色斑点检测的输出。我已经完成了截图方法,但问题是它总是黑色的,可能是因为在opencv中获取图像的方法不同。
我假设你只是想在主图像,而不是标题菜单栏等
如果这是正确的,如果你正在使用或建筑物上的OpenCV的ColorBlobDetection例子,那么你实际上已经有图像我认为您需要在ColorBlobDetectionActivity的“onCameraFrame”方法的输出中 - 即返回的mRgba矩阵。
您应该可以保存或使用imwrite存储它。
这里是一个被测试和工程实例代码 - 实际上,你可能不希望这样做的每一帧上,而是做一次当一些触发设置,但下面的代码给出的总体思路:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
if (mIsColorSelected) {
mDetector.process(mRgba);
List<MatOfPoint> contours = mDetector.getContours();
Log.e(TAG, "Contours count: " + contours.size());
Imgproc.drawContours(mRgba, contours, -1, CONTOUR_COLOR);
Mat colorLabel = mRgba.submat(4, 68, 4, 68);
colorLabel.setTo(mBlobColorRgba);
Mat spectrumLabel = mRgba.submat(4, 4 + mSpectrum.rows(), 70, 70 + mSpectrum.cols());
mSpectrum.copyTo(spectrumLabel);
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
String testFilename = "TestOCVwrite.png";
File testFile = new File(path, testFilename);
String testFullfileName = testFile.toString();
Log.i(TAG, "Writing to filename: " + testFilename);
Boolean writeResult = Imgcodecs.imwrite(testFullfileName, mRgba);
if (!writeResult) {
Log.i(TAG, "Failed to write to filename: " + testFilename);
}
}
return mRgba;
}
有些事情要注意:
确保您有写信给外部您清单的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
您需要也可为M请确保在文件名中包含文件类型,例如png,jpeg等,否则您将收到错误消息:
could not find a writer for the specified extension in function bool cv::imwrite_(const cv::String&, const cv::Mat&, const std::vector&, bool)