我有来自套接字连接的图像数据作为字节[]。我见过的所有示例都cvLoadImage()传递了文件名。我是否必须将每个图像保存到文件并重新打开它才能进行处理?对于需要发生的事情来说,这似乎有很多开销,是否可以从 byte[] 数据加载图像?
我正在使用javacv进行对象检测的项目,因为我经历了几个用于检测矩形的代码示例,我发现所有代码示例都包含在这些类中的以下方法.
请一些人解释一下这种方法的含义或用法.
double angle( CvPoint* pt1, CvPoint* pt2, CvPoint* pt0 )
{
double dx1 = pt1->x - pt0->x;
double dy1 = pt1->y - pt0->y;
double dx2 = pt2->x - pt0->x;
double dy2 = pt2->y - pt0->y;
return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
}
Run Code Online (Sandbox Code Playgroud)
这是该方法的来源.
我正在使用javacv开发项目,我能够识别多边形并将其存储在CvSeq中.我尝试访问该结构中的点,但它对我不起作用.那么请一些人解释如何在javacv中访问CvSeq结构中的点?
例如,我需要访问下面图像的8个边缘点.所以我可以访问多边形每一边的长度.

请一些人解释如何识别彼此不完全分开的轮廓的方形.例如,我需要识别下面图像中的方块数以及它们边缘的x,y坐标.我试着通过这个问题,但它对我不起作用.
所以请使用简单的代码示例解释一下.
这是我可以生成的图像,请您解释如何识别此图像中的上方.

所以请善意解释这一点.
我安装了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不接受字符串作为参数.
有很多关于OpenCV C++的书,很多例子等等.但我在Java上找不到.我知道基本知识,如阅读,显示图像,抓取帧并在循环中显示它们,但它是如此之少.我想做ComputerVision,但我在google上找到关于JavaCV的所有内容都是我之前提到的.我在哪里/如何学习?
我最近从OpenCV C++ API切换到JavaCV,我正在尝试执行基本操作,例如迭代Mat.我正在尝试访问Mat的像素值,但我似乎无法找到方法,而JavaCV项目缺少文档.使用OpenCV C++ API,我曾经使用该.at()方法访问Mat的像素值.
Mat加载为CV_8UC1 Mat(灰度),如下面的代码所示,我想打印/使用像素的0-255值.
Mat image = imread("images/Text00.png", CV_8UC1);
// Make sure it was successfully loaded.
if (image == null) {
System.out.println("Image not found!");
System.exit(1);
}
System.out.println(image.rows());
System.out.println(image.cols());
for (int y = 0; y < image.rows(); y++) {
for (int x = 0; x < image.cols(); x++) {
// How to print the 0 to 255 value of each pixel in the Mat image.
}
}
Run Code Online (Sandbox Code Playgroud)
类似但不适用的答案:
我想在我的应用程序中使用一些blob检测,这是用Java编写的,因此使用JavaCV而不是OpenCV.我发现很多课程如下:
SimpleBlobDetector,CvBlobDetector,CvBlob,...但我无法找到任何教程或演示/示例代码在Java中使用这些.任何人都可以告诉我如何使用这些,因为我无法弄明白,并没有很好的文档.谢谢!
在 Eclipse 中导出时,我选择“将所需的库打包到生成的 jar 中”。jar 文件仅适用于我的机器。但是,当我在其他机器上测试它时,它给出了这个异常:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593)
at com.googlecode.javacpp.Loader.load(Loader.java:489)
at com.googlecode.javacpp.Loader.load(Loader.java:431)
at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:136)
at mains.<clinit>(mains.java:25)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:266)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
Run Code Online (Sandbox Code Playgroud) OpenCV FaceRecognizer我正在使用类型进行两张面孔的比较工作LBP。我的问题是如何计算百分比格式预测置信度?给出以下代码(javacv):
int n[] = new int[1];
double p[] = new double[1];
personRecognizer.predict(mat, n, p);
int confidence = p[0];
Run Code Online (Sandbox Code Playgroud)
但信心是一个双值,how我应该convert把它变成一个percentage %值吗probability?有现成的公式吗?
抱歉,如果我没有清楚地表达我的问题。好的,这是场景:
我想比较两张人脸图像,得到两张脸的相似度,例如输入约翰的照片和他同学汤姆的照片,假设相似度是30%;然后输入John的照片和他弟弟Jack的照片,得出的可能性是80%。这两个可能性因子表明杰克比汤姆更像他的兄弟约翰......所以百分比格式的可能性因子就是我想要的,值越大意味着两个输入面孔的可能性越大。目前,我通过使用 opencv 函数 FaceRecognizer.predict 计算输入的置信度值来做到这一点,但置信度值实际上代表特征向量空间中输入之间的距离,那么我如何将距离(置信度)缩放到可能性百分比格式?