OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
楼主: 流放荒帝

Java+Opencv 入门汇总

[复制链接]
 楼主| 发表于 2016-8-6 12:02:10 | 显示全部楼层
//Java一维数组给Mat赋值*********************************               
float data[] = {1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8};
Mat mat_gray=new Mat(4,6,CvType.CV_32FC1);
Mat mat_color=new Mat(2,4,CvType.CV_32FC3);
mat_gray.put(0,0,mask);
mat_color.put(0,0,mask);

//C++一维数组给Mat赋值*********************************       
float data[24]={1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8};
Mat mat_gray=Mat(4,6,CV_32FC1,data);
Mat mat_color=Mat(2,4,CV_32FC3,data);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-6 14:48:49 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 13:16:35 | 显示全部楼层
流放荒帝 发表于 2016-3-24 14:39
private Mat doBackgroundRemoval(Mat frame)
     {
             // init

很简单
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-28 16:01:11 | 显示全部楼层
shaoyi7 发表于 2016-7-20 09:59
已知图像img,
已知坐标点(10,10)
java中怎么获得这个点对应的像素值呢?

double data[]=img.get(10,10);

如果img 是彩色的如RGB色彩空间,则data[]中有三个值,data[0],data[1],data[2]分别对应R,G,B值。
若img为灰度图像,则data[]中只有一个值。
刚刚知道这种方法
回复 支持 反对

使用道具 举报

发表于 2016-10-26 17:14:43 | 显示全部楼层
流放荒帝 发表于 2016-8-6 12:02
//Java一维数组给Mat赋值*********************************               
float data[] = {1,1,1,2,2,2,3,3,3,4,4,4, ...

楼主请问为何mat_gray.put(0,0,mask),做put操作时都是往0行0列里面存这个数组呢?很多地方都这样用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 13:16:41 | 显示全部楼层
pizza 发表于 2016-10-26 17:14
楼主请问为何mat_gray.put(0,0,mask),做put操作时都是往0行0列里面存这个数组呢?很多地方都这样用 ...

不为什么,语法就这样!!!
mask为数组,
若mat_gray是灰度的。mask[1]
若mat_gray是RGB,则mask[3];
mat_gray.put(0,0,mask)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 13:16:43 | 显示全部楼层
pizza 发表于 2016-10-26 17:14
楼主请问为何mat_gray.put(0,0,mask),做put操作时都是往0行0列里面存这个数组呢?很多地方都这样用 ...

不为什么,语法就这样!!!
mask为数组,
若mat_gray是灰度的。mask[1]
若mat_gray是RGB,则mask[3];
mat_gray.put(0,0,mask)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 16:59:09 | 显示全部楼层
import org.opencv.calib3d.*;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.*;

import java.util.List;
import java.util.LinkedList;
import java.util.ArrayList;

final public class HomographyTest {

    public static void main(String[] args) {

        System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // needed by OpenCV

        String rfileoutput = "/home/will/dev/Homog.jpg";
        String ofileoutput = "/home/will/dev/HomogOutput.jpg";

        Point SEShedCornerDst = new Point(49, 74);
        Point CloseForsythiaDst = new Point(41, 41);
        Point CornerHazelDst = new Point(111, 157);
        Point FarForsythiaDst = new Point(175, 21);
        Point FirstLiquidAmberDst = new Point(235, 164);
        Point SecondLiquidAmberDst = new Point(282, 721);
        Point ThirdLiquidAmberDst = new Point(317, 544);

        Point SEShedCornerSrc = new Point(30, 231);
        Point CloseForsythiaSrc = new Point(160, 290);
        Point CornerHazelSrc = new Point(50, 125);
        Point FarForsythiaSrc = new Point(628, 146);
        Point FirstLiquidAmberSrc = new Point(299, 64);
        Point SecondLiquidAmberSrc = new Point(146, 37);
        Point ThirdLiquidAmberSrc = new Point(48,34);

        Point [] srcArray = new Point[7];
        srcArray[0] = SEShedCornerSrc;
        srcArray[1] = CloseForsythiaSrc;
        srcArray[2] = CornerHazelSrc;
        srcArray[3] = FarForsythiaSrc;
        srcArray[4] = FirstLiquidAmberSrc;
        srcArray[5] = SecondLiquidAmberSrc;
        srcArray[6] = ThirdLiquidAmberSrc;

        Mat OutputMat = new Mat();
        LinkedList<Point> dstArray = new LinkedList<Point>();

        dstArray.add(SEShedCornerDst);
        dstArray.add(CloseForsythiaDst);        
        dstArray.add(CornerHazelDst);
        dstArray.add(FarForsythiaDst);
        dstArray.add(FirstLiquidAmberDst);
        dstArray.add(SecondLiquidAmberDst);
        dstArray.add(ThirdLiquidAmberDst);

        MatOfPoint2f dst = new MatOfPoint2f();
        dst.fromList(dstArray);

        MatOfPoint2f src = new MatOfPoint2f();
        src.fromArray(srcArray);

        Mat Homog;


        Homog = Calib3d.findHomography(src, dst, Calib3d.RANSAC, 10, OutputMat);
        Mat homography = Calib3d.findHomography(src, dst, Calib3d.RANSAC, 10);
       // image you want to transform
       Mat image = Highgui.imread("image/img.jpg");
      // outputMat will contain the perspectively changed image
      Imgproc.warpPerspective(image, outputMat, homography, new Size(image.cols(), image.rows()));

      Mat src = new Mat();
      // push a mat object with your points to the src
      src.push_back(new MatOfPoint2f(new Point(x,y)));
    // dst will contain your transformed points
    Core.perspectiveTransform(src, dst, homography)

    }
}
回复 支持 反对

使用道具 举报

发表于 2016-11-10 14:20:21 | 显示全部楼层
好复杂的感觉,想学习opencv目标检测方面,不知道如何入手..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 15:44:11 | 显示全部楼层
Mise 发表于 2016-11-10 14:20
好复杂的感觉,想学习opencv目标检测方面,不知道如何入手..

从最简单的模仿!!!慢慢积累
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-7 06:42 , Processed in 0.009720 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表