Tag: opencv

将OpenCV Mat对象转换为BufferedImage

我正在尝试使用OpenCV Java API创建一个辅助函数,它将处理输入图像并返回输出字节数组。 输入图像是保存在计算机中的jpg文件。 输入和输出图像使用Swing显示在Java UI中。 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // Load image from file Mat rgba = Highgui.imread(filePath); Imgproc.cvtColor(rgba, rgba, Imgproc.COLOR_RGB2GRAY, 0); // Convert back to byte[] and return byte[] return_buff = new byte[(int) (rgba.total() * rgba.channels())]; rgba.get(0, 0, return_buff); return return_buff; 当return_buff返回并转换为BufferedImage时,我得到NULL。 当我注释掉Imgproc.cvtColor函数时, return_buff被正确转换为我可以显示的BufferedImage。 似乎Imgproc.cvtColor正在返回一个我无法在Java中显示的Mat对象。 这是我从byte []转换为BufferedImage的代码: InputStream in = new ByteArrayInputStream(inputByteArray); BufferedImage outputImage = ImageIO.read(in); […]

导入org.opencv.highgui无法解析

我安装了OpenCV(opencv-3.0.0-alpha)并且它可以正常工作但我无法使用该导入 import org.opencv.core.*; import org.opencv.highgui.Highgui; public class Main { public static void main(String[] args) { // System.loadLibrary(“opencv_java244”); // Mat m = Highgui.imread(“C:/Users/raj/Desktop/sa1.png”, // Highgui.CV_LOAD_IMAGE_COLOR); // new LoadImage(“C:/Users/raj/Desktop/dst1.jpg”, m); } } 我收到这个错误 The import org.opencv.highgui cannot be resolved 我怎么解决这个问题?

Java中的OpenCv:不推荐使用DescriptorExtractor。 我该用什么呢?

我有一些示例代码,它使用OpenCV(Java包装器)将2个图像拼接在一起。 它引用了一个不推荐使用的类“DescriptorExtractor”。 我在官方网站文档或源代码中找不到任何关于我应该使用的信息。 当一些东西被弃用时,我总是很生气,而且它并没有告诉你应该使用什么。 谁能帮我? 我正在使用OpenCV 3.4.1和预先构建的Windows库。 该课程的官方文档似乎在这里 。 “FeatureDetector”类同样被弃用,同样没有任何关于使用什么的提示。

使用opencv或javacv识别图像中具有相同颜色的轮廓?

这个问题与我之前在该问题中的问题有关,我使用彩色图像作为输入,并通过使用线条颜色进行识别,但我想知道如何使用灰度图像识别这种图像。 这是灰度输入图像,必须进行识别 我需要通过其位置(x和y坐标)识别以下对象。 请一些人用简单的代码示例来解释这些对象,我也需要识别这些对象的连接线(如下图所示)。 请使用简单的代码示例来解释这个问题。

如何获得正确匹配的function

我正在两个不同的图像中进行特征检测,并且来自描述符匹配器的结果图像包含不属于彼此的特征,如下面的img_1所示。 我遵循的步骤如下: 使用SIFT算法进行特征检测。 此步骤为每个图像生成MatOdKeyPoint对象,这意味着MatKeyPts_1和MatKeyPts_2 使用SURF算法的描述符提取器。 描述符匹配使用BRUTFORCE算法。 此步骤的代码发布在下面, query_img和train_img的描述符提取器在此步骤中用作输入。 我也使用自己创建的类来控制和维护这个过程。 问题是,步骤3的结果是img_1下面发布的图像,它具有与其他人相关的完全不相似的特征,我希望看到,例如,手的特定区域(img_1,右)被链接在(img_1,左)手中的类似function,但正如你所看到我有混合和无关的function。 我的问题是如何使用SIFT和SURF作为特征检测器和描述符提取器分别获得正确的特征匹配? private static void descriptorMatcher() { // TODO Auto-generated method stub MatOfDMatch matDMatch = new MatOfDMatch();//empty MatOfDmatch object dm.match(matFactory.getComputedDescExtMatAt(0), matFactory.getComputedDescExtMatAt(1), matDMatch);//descriptor extractor of the query and the train image are used as parameters matFactory.addRawMatchesMatDMatch(matDMatch); /*writing the raw MatDMatches*/ Mat outImg = new Mat(); Features2d.drawMatches(matFactory.getMatAt(0), matFactory.getMatKeyPtsAt(0), […]

如何将GLCM的C ++实现转换为Java?

我从GitHub得到以下片段,通过OpenCV计算灰度共生矩阵(GLCM): float energy=0,contrast=0,homogenity=0,IDM=0,entropy=0,mean1=0; int row=img.rows,col=img.cols; Mat gl=Mat::zeros(256,256,CV_32FC1); //creating glcm matrix with 256 levels,radius=1 and in the horizontal direction for(int i=0;i<row;i++) for(int j=0;j<col-1;j++) gl.at(img.at(i,j),img.at(i,j+1))=gl.at(img.at(i,j),img.at(i,j+1))+1; // normalizing glcm matrix for parameter determination gl=gl+gl.t(); gl=gl/sum(gl)[0]; 上面的代码是用C ++编写的。 我需要将其转换为Java但我仍然坚持这一行: gl.at(img.at(i,j),img.at(i,j+1))=gl.at(img.at‌​(i,j),img.at(‌​i,j+1))+1; 有人可以帮我解决这个问题吗?

如何将屏幕方向从横向更改为纵向?

我已经应用了以下post答案,但无法解决问题。 OpenCV摄像头方向问题我得到以下exception。 Exception locking surface java.lang.IllegalArgumentException at android.view.Surface.nativeLockCanvas(Native Method) at android.view.Surface.lockCanvas(Surface.java:264) at android.view.SurfaceView$4.internalLockCanvas(SurfaceView.java:825) at android.view.SurfaceView$4.lockCanvas(SurfaceView.java:793) at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:403) at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:365) at java.lang.Thread.run(Thread.java:818) 这是opencv库函数抛出exception: protected void deliverAndDrawFrame(CvCameraViewFrame frame) { Mat modified; if (mListener != null) { modified = mListener.onCameraFrame(frame); } else { modified = frame.rgba(); } boolean bmpValid = true; Canvas canvas = null ; if (modified […]

使用OpenCV for Android将小图像复制到相机框架中

我目前正在开发一个应该在相机框架上绘制一个小图像的程序。 使用Android OpenCV,您可以使用以下function来处理帧: public Mat onCameraFrame(CvCameraViewFrame inputFrame) { Mat rgba = inputFrame.rgba(); mDetector.setFrame(rgba); mDetector.processFrame(); return rgba; } Mat rgba然后显示在屏幕上。 我的探测器现在应该处理帧rgba(改变它)。 这是相关的代码: public void processFrame() { // (1) Doesn’t work Rect roi = new Rect(0, 0, 100, 100); Mat submat = mOutputFrame.submat(roi); Mat image = new Mat(100, 100, CvType.CV_8UC3, new Scalar(0,0,0)); image.copyTo(submat); // (2) Does work […]

文本提取和分段打开CV

我之前从未使用过OpenCV,但我正在尝试编写神经网络系统来识别文本,我需要一些文本提取/分割工具。 如何使用java OpenCV预处理和分割包含文本的图像。 我不需要识别文本,我只需要将每个字母放在单独的图像中。 像这样的东西:

如何使用java opencv对图像进行去噪

在我的情况下,我想删除我的图像的所有黑点。 在这里我的图像可以表示如下。 当我正在使用我的程序时,图像正在平滑程序如何不删除黑点。 请帮我删除黑点。请尽快回复我原始图片代码如下。 public class Denoise { /** * @param args the command line arguments */ public static void main(String[] args) { try{ System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); Mat source =Imgcodecs.imread(“C:\\Users\\My Kindom\\Downloads\\printscreen.JPG”,Imgcodecs.CV_LOAD_IMAGE_COLOR); Mat destination = new Mat(source.rows(),source.cols(),source.type()); destination = source; Photo.fastNlMeansDenoisingColored(source,destination, 10, 10, 7, 21); Imgcodecs.imwrite(“C:\\Users\\My Kindom\\Downloads\\Denoise.jpg”, destination); }catch(Exception e){} // TODO code application logic here […]