我想知道如何使用JavaCV在OpenCV中构造以下C++语句:
float* p = (float*)cvGetSeqElem(circles, i);
int radius = cvRound(p[2]);
Run Code Online (Sandbox Code Playgroud)
使用cvHoughCircles()检测圆的半径.显然Java不使用指针,所以我不知道如何在Java中这样做.到目前为止我的代码所以你可以看到它的上下文:
lines = cvHoughCircles(frame2, storage, CV_HOUGH_GRADIENT, 1, 50, 300, 60, 10, 600);
for (int i = 0; i < lines.total(); i++) {
//Would like the code to go here
CvPoint2D32f point = new CvPoint2D32f(cvGetSeqElem(lines, i));
cvCircle(src, cvPoint((int)point.x(), (int)point.y()), 3, CvScalar.WHITE, -1, 8, 0);
Point p = new Point((int)point.x(), (int)point.y());
points.add(p);
}
Run Code Online (Sandbox Code Playgroud) 有些专家可以解释一下我是否可以使用cvHaarDetectObjects()方法来检测方块并获得宽度和高度?我找到了一个使用这种方法进行面部检测的代码,但我需要知道是否可以将它用于矩形检测.
String src="src/squiredetection/MY.JPG";
IplImage grabbedImage = cvLoadImage(src);
IplImage grayImage = IplImage.create(grabbedImage.width(), grabbedImage.height(), IPL_DEPTH_8U, 1);
cvCvtColor(grabbedImage, grayImage, CV_BGR2GRAY);
CvSeq faces = cvHaarDetectObjects(grayImage, cascade, storage, 1.1, 3, 0);//*
for (int i = 0; i < faces.total(); i++) {
CvRect r = new CvRect(cvGetSeqElem(faces, i));
cvRectangle(grabbedImage, cvPoint(r.x(), r.y()), cvPoint(r.x()+r.width(), r.y()+r.height()), CvScalar.RED, 1, CV_AA, 0);
/* hatPoints[0].x = r.x-r.width/10; hatPoints[0].y = r.y-r.height/10;
hatPoints[1].x = r.x+r.width*11/10; hatPoints[1].y = r.y-r.height/10;
hatPoints[2].x = r.x+r.width/2; hatPoints[2].y = r.y-r.height/2;*/
// cvFillConvexPoly(grabbedImage, hatPoints, hatPoints.length, CvScalar.GREEN, CV_AA, 0);
} …Run Code Online (Sandbox Code Playgroud) 在我的项目中,我希望从特定颜色的最大均匀区域获得大小(在我的示例中,它是蓝天).
我的第一个想法是转换原始图像:

到二进制图像,检测天空颜色并使用此区域创建一个遮罩:

但是如何获得这些白色像素的大小和位置?我想要一种有效的方法,如果图片在图片的上1/3处有蓝天,则表示正确.有任何想法吗?我应该创建一个"全局掩码"(参见注释中的图像3)并将其与二进制图片进行比较吗?或者有更简单的方法吗?
谢谢.
我正在使用新的OpenCV Java绑定来读取图像并对图像进行一些处理.我正在尝试使用Java绑定将C代码转换为Java,但似乎无法找到相关的方法:
C代码:
cv::Mat img = cv::imread(argv[1]);
cv::Mat gray;
cv::cvtColor(img, gray, CV_BGR2GRAY);
int erosion_size = 5;
cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS,
cv::Size(2 * erosion_size + 1, 2 * erosion_size + 1),
cv::Point(erosion_size, erosion_size) );
cv::erode(gray, gray, element);
Run Code Online (Sandbox Code Playgroud)
我找不到:
imreadcvtcolorgetStructuringElementerode我在这里看了看api:http://docs.opencv.org/java/
我正在使用 videocapture 对象来捕获和处理 opencv/javacv 中的视频帧。我不知道如何获得帧速率。我想要一个在实时视频捕获期间在后台运行的计时器。它应该在检测到人脸时暂停并稍后继续。由于 haarcascade 文件的处理,每个 rame 需要很多时间来处理。如何调整帧率。
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
VideoCapture camera = new VideoCapture(0);
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个可以使用您的计算机网络摄像头检测心跳的应用程序.我从2周开始编写代码并开发了这段代码,到目前为止我已经完成了
它是如何工作的?如下图所示......
在这里,我需要帮助从FFT频谱中提取心跳.谁能帮我.在这里,是在python中开发的类似应用程序,但我无法解释这个代码,所以我在开发过程中开发相同.任何人都可以帮助我低估这个python代码中提取心跳的部分.
//---------import required ilbrary -----------
import gab.opencv.*;
import processing.video.*;
import java.awt.*;
import java.util.*;
import ddf.minim.analysis.*;
import ddf.minim.*;
//----------create objects---------------------------------
Capture video; // camera object
OpenCV opencv; // opencv object
Minim minim;
FFT fft;
//IIRFilter filt;
//--------- Create ArrayList--------------------------------
ArrayList<Float> poop = new ArrayList();
float[] sample;
int bufferSize = 128;
int sampleRate = 512;
int bandWidth = 20;
int centerFreq = 80;
//---------------------------------------------------
void setup() {
size(640, 480); // size of …Run Code Online (Sandbox Code Playgroud) 我想制作一个便携式opencv应用程序,将依赖项添加到 maven 文件中pom.xml。
简化的代码是:
import org.opencv.core.Mat;
public class Builder {
public static void main(String[] args) {
nu.pattern.OpenCV.loadShared();
System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
Mat mat = new Mat(4,3,1);
System.out.println(mat.dump());
}
}
Run Code Online (Sandbox Code Playgroud)
我将此添加到pom.xml:
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>3.2.0-0</version>
<scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
它适用于 java 9 的以下警告:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by nu.pattern.OpenCV$SharedLoader (file:/home/martin/.m2/repository/org/openpnp/opencv/3.2.0-0/opencv-3.2.0-0.jar) to field java.lang.ClassLoader.usr_paths
WARNING: Please consider reporting this to the maintainers of nu.pattern.OpenCV$SharedLoader
WARNING: Use --illegal-access=warn to enable warnings of further …Run Code Online (Sandbox Code Playgroud) 我正在 Java 中使用 OpenCV(实际上是在 Scala 中)。我正在使用 org.bytedeco 包装器(opencpp 和 javacv),但文档不是很好。
问题是,根据示例,使用两个不同的 API:org.bytedeco.opencv.opencv_core或org.opencv.core
org.bytedeco.opencv.opencv_core工作正常,但org.opencv.core抛出 java.lang.UnsatisfiedLinkError:
An exception or error caused a run to abort: no opencv_java410 in java.library.path
java.lang.UnsatisfiedLinkError: no opencv_java410 in java.library.path
Run Code Online (Sandbox Code Playgroud)
我完全迷失了:
提前致谢。
使用的库: "org.bytedeco" % "javacv-platform" % "1.5.1" 为所有平台导入 lib。
我使用Javacv代码在Andorid中制作了一个自定义相机.我没有包含所有.so文件,只包括我的应用程序所需的文件.如下面的屏幕截图:

它适用于Samsumg Galaxy S2,S3和索尼爱立信Xperia Arc.没问题.但是,当我试图在三星P7500 Galaxy Tab 10.1上运行它时,它崩溃了我使用的第一行Javacv代码,恰好是:
yuvIplImage = IplImage.create(previewWidth, previewHeight, IPL_DEPTH_8U, 2);
Run Code Online (Sandbox Code Playgroud)
此尝试的Logcat输出:
07-08 13:30:13.930: I/ActivityManager(192): START {intent.toShortString} from pid 7836
07-08 13:30:14.000: I/ActivityManager(192): Start proc app.processName for activity hostingNameStr: pid=7847 uid=10001 gids={1006, 3003, 1015, 1023}
07-08 13:30:14.190: D/NvOsDebugPrintf(116): GetParameter(): 37 not supported
07-08 13:30:14.190: E/NvOmxCameraSettingsParser(116): Param type 71 not supported
07-08 13:30:14.240: W/dalvikvm(7847): VFY: unable to resolve virtual method 18783: Ljava/awt/image/BufferedImage;.getSampleModel ()Ljava/awt/image/SampleModel;
07-08 13:30:14.250: D/dalvikvm(7847): VFY: replacing opcode 0x22 at 0x0007
07-08 13:30:14.250: W/dalvikvm(7847): VFY: …Run Code Online (Sandbox Code Playgroud) 我开发了基于JavaCV的OCR系统.
我为我的项目使用以下库:
在一个案例中,我需要找到图像的某些部分并识别其上的字母.
我以IplImage类型存储图像的一部分.
但对于Tesseract,我必须使用PIX格式.
如何将IplImage转换为Pix?