从IplImage *转换为cv :: MAT

时间:2013-04-10 11:53:33

标签: c++ opencv iplimage mat

我搜索过将IplImage *转换为Mat,但所有答案都是关于转换为cvMat的。

怎么样,我能做到吗? Mat和cvMat有什么区别?

提前致谢

5 个答案:

答案 0 :(得分:39)

对于记录:看一下core / src / matrix.cpp,似乎构造函数cv::Mat(IplImage*)确实已经消失了。

但我找到了另一种选择:

IplImage * ipl = ...;
cv::Mat m = cv::cvarrToMat(ipl);  // default additional arguments: don't copy data.

答案 1 :(得分:13)

这是一个很好的解决方案

Mat(const IplImage* img, bool copyData=false);

答案 2 :(得分:11)

推荐的方法是cv::cvarrToMat功能

cv::Mat - 是OpenCV 2.x的基础数据结构

CvMat - 是cv::Mat

的旧C类似物

答案 3 :(得分:5)

查看Mat documentation

// converts old-style IplImage to the new matrix; the data is not copied by default
Mat(const IplImage* img, bool copyData=false);

答案 4 :(得分:4)

  • cv :: Mat或Mat,两者都是一样的。

  • Mat有一个运算符CvMat(),所以简单的赋值工作

将Mat转换为CvMat

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class NamespaceParameterExampleApplication extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws IOException {
        final FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("namespace-parameter-example.fxml"));

        fxmlLoader.getNamespace()
                  .put("labelText", "External Text");

        final Parent root = fxmlLoader.load();

        primaryStage.setTitle("Namespace Parameter Example");
        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }
}

将CVMat转换为Mat

Mat mat = ---------;
CvMat cvmat = mat;

将Mat转换为IplImage *

<强>&GT;对于单通道

Mat dst = Mat(cvmat, true);  

<强>&GT;三通道

IplImage* image = cvCloneImage(&(IplImage)mat); 

希望这会对你有所帮助。干杯:)