OpenCV中文网站

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

Java+Opencv 入门汇总

[复制链接]
 楼主| 发表于 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目标检测方面,不知道如何入手..

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

使用道具 举报

发表于 2016-12-16 10:44:12 | 显示全部楼层
流放荒帝 发表于 2016-3-24 14:39
private Mat doBackgroundRemoval(Mat frame)
     {
             // init

java对透明底的支持在哪?,我需要去除背景后得到剩余图像,或者是打在透明底板上的,
c++的有
void createAlphaMat(Mat &mat)
{
    for (int i = 0; i < mat.rows; ++i) {
        for (int j = 0; j < mat.cols; ++j) {
            Vec4b& rgba = mat.at<Vec4b>(i, j);
            rgba[0] = UCHAR_MAX;
            rgba[1] = saturate_cast<uchar>((float (mat.cols - j)) / ((float)mat.cols) * UCHAR_MAX);
            rgba[2] = saturate_cast<uchar>((float (mat.rows - i)) / ((float)mat.rows) * UCHAR_MAX);
            rgba[3] = saturate_cast<uchar>(0.5 * (rgba[1] + rgba[2]));
        }
    }
}

int main(int argv, char **argc)
{
    // Create mat with alpha channel
    Mat mat(480, 640, CV_8UC4);
    createAlphaMat(mat);

    vector<int> compression_params;
    compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
    compression_params.push_back(9);

    try {
        imwrite("alpha.png", mat, compression_params);
    }
    catch (runtime_error& ex) {
        fprintf(stderr, "Exception converting image to PNG format: %s\n", ex.what());
        return 1;
    }

    fprintf(stdout, "Saved PNG file with alpha data.\n");
    return 0;
}
java还需要用JNI连吗?
求助!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-4 12:59 , Processed in 0.010599 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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