我已经成功测试了hadoop中的opencv,以便在mapreduce作业中读取和分析来自本地文件系统的图像.
但是如何启用opencv从HDFS而不是本地文件系统读取图像?
我正在尝试创建一个Android应用.它始终以纵向模式显示相机预览,并对其(某些)帧执行一些繁重的图像处理操作.因此,我正在使用OpenCV(它的OpenCV4Android和本机C/C++组件).问题是当使用CameraBridgeViewBase或JavaCameraView类时,OnCameraFrame返回的帧处于横向模式.
现在,如果将Activity定义为使用横向模式(就像OpenCV的示例应用程序一样),预览看起来很好,但任何其他UI视图都倾斜了90度(如前所述,设备应该以纵向模式运行我的应用程序).
如果"活动"设置为纵向模式,UI视图显然看起来正确,但相机预览将倾斜90度.
如果我尝试通过操作OnCameraFrame上的图像矩阵来旋转每个帧,如下所示:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
Core.transpose(mRgba,mRgbaT);
Core.flip(mRgbaT, mRgbaT, -1);
Imgproc.resize(mRgbaT, mRgbaT, mRgba.size());
return mRgbaT;
}
Run Code Online (Sandbox Code Playgroud)
然后每个相机的框架填充设备的宽度,但不是它的高度(因此,它看起来像拉伸),加上 - 它大大减慢了帧速率.尝试将图像调整为全屏(或任何不同于原始帧大小的大小)会导致根本不显示图像(黑屏)并抛出以下异常:
E/CameraBridge(11183): Utils.matToBitmap() throws an exception: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:如何在纵向模式和全屏模式下显示OpenCV的相机预览?
不幸的是,由于我的初学者声誉,我不能附加屏幕截图.此外,我知道之前有过类似问题的问题,但没有一个答案似乎完全解决了问题.
我安装了JavaCV/OpenCV库,我遇到了基本示例代码的问题.
根据我看过的几个例子,这段代码应该加载一个图像:
IplImage image = cvLoadImage("C:\\img.jpg");
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时,我得到一个"找不到符号"的错误.
由于这是我第一次使用它,我不确定我是否搞砸了安装.
根据最新的JavaCV自述文件,我确实拥有正确版本的OpenCV.我还导入了所有JavaCV jar文件.据我所知,我也正确设置了所有路径.
谁知道问题是什么?
编辑:
完整代码:
import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import java.io.File;
public class demo {
public static void main(String[] args)
{
IplImage image = cvLoadImage("C:\\img.jpg");
final CanvasFrame canvas = new CanvasFrame("Demo");
canvas.showImage(image);
canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试运行它时出错:
线程"main"中的异常java.lang.RuntimeException:无法编译的源代码 - 错误的sym类型:javacv.demo.main中的cvLoadImage(demo.java:17)
Java结果:1
似乎它声称cvLoadImage不接受字符串作为参数.
我正在尝试将一些Matlab代码移植到OpenCV,其中一部分涉及获取协方差矩阵
八度例子:
octave:1> A=[-1, 1, 2; -2, 3, 1; 4, 0, 3;]
A =
-1 1 2
-2 3 1
4 0 3
octave:2> cov(A)
ans =
10.3333 -4.1667 3.0000
-4.1667 2.3333 -1.5000
3.0000 -1.5000 1.0000
Run Code Online (Sandbox Code Playgroud)
OpenCV版本:
Mat_<double> A(3,3); A << -1, 1, 2, -2, 3, 1 , 4, 0, 3;
Mat Sw, mea;
calcCovarMatrix( A, Sw, mea, cv::COVAR_NORMAL|cv::COVAR_ROWS );
cerr << Sw << endl;
[20.66666666666666, -8.333333333333334, 6;
-8.333333333333334, 4.666666666666667, -3;
6, -3, 2]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,类似,但在OpenCV版本中是因素2.这里有明显的错误吗?
切换ROWS/COLS标志与转置输入相同:
calcCovarMatrix( A, Sw, mea, …Run Code Online (Sandbox Code Playgroud) 我不知道如何在下面发布的方法中使用Scalar类来指定颜色?
Features2d.drawKeypoints(mKeyPoints_0, mKeyPoints_0, outImage, Scalar color, Features2d.DRAW_RICH_KEYPOINTS);
Run Code Online (Sandbox Code Playgroud) 如果有人在.net 3.5框架中使用Emgu openCv包装器,请告诉我为什么会出现此异常,其内部异常无法加载cxcore.dll.
我正在尝试在jTable中加载.csv文件。在记事本中,该文件显示为OK,但是在jTable中,某些字符(如“£”,“ $”)变为一个框。
private void parseUsingOpenCSV(String filename){
DefaultTableModel model = (DefaultTableModel) empTbl.getModel();
int rows = model.getRowCount();
if (rows>0){
for(int i=0 ; i<rows; i++)
{model.removeRow(0);}
}
try {
CSVReader reader = new CSVReader(new FileReader(filename));
String [] nextLine;
int rowNumber = 0;
while ((nextLine = reader.readNext()) != null) {
rowNumber++;
model.addRow(new Object[]{nextLine[0], nextLine[1], nextLine[2], nextLine[3], nextLine[4], nextLine[5], nextLine[6], nextLine[7]});
}
} catch (IOException e) {
System.out.println(e);
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题 ?
我必须在我的应用程序中使用Gabor过滤器,但我对这个OpenCV方法参数值没有任何线索.我想编码一个虹膜.开始Gabor滤波器并获取特征(我想对12组Gabor参数值执行此操作).然后我想算一个汉明dystans并做认证.
如果有人可以在这里写params范围,或者如何在函数中计算它:
Imgproc.getGaborKernel(new Size(kSize[j], kSize[j]), sigma, theta, lambda, gamma);
Run Code Online (Sandbox Code Playgroud)
我将非常感激.我当然试图自己分配,但没有成功.
示例文件:

我有用于旋转的矩阵:
CvMat* rot_mat = cvCreateMat(2, 3, CV_32FC1);
cv2DRotationMatrix(center, angle, scale, rot_mat);
...
Run Code Online (Sandbox Code Playgroud)
该矩阵用于图像操作。
cvWarpAffine(..., ..., rot_mat, ..., ...);
Run Code Online (Sandbox Code Playgroud)
我必须知道,此矩阵应如何影响确切的像素-应该转移的位置。
如何将2D点(像素位置)与矩阵相乘以找出应将像素转移到哪里?
试图在heroku上安装tensorflow,最后它失败了:
pywrap_tensorflow.so: undefined symbol: PyUnicodeUCS4_FromStringAndSize
Run Code Online (Sandbox Code Playgroud)
requirements.txt:
numpy
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
Run Code Online (Sandbox Code Playgroud)
安装:
git push heroku master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 327 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Using set buildpack heroku/python
remote: -----> Python app detected
remote: -----> Installing dependencies with pip
remote: Collecting numpy (from -r requirements.txt (line 1)) …Run Code Online (Sandbox Code Playgroud)