OpenCV findFundamentalMat_1
FindFundamentalMat_0's twin — same matrix, different sticker
- points1
- points2
- mask
- nparray_0
- nparray_1
OpenCV findFundamentalMat_1 is findFundamentalMat_0 under a second name. Identical inputs - points1, points2, method, ransacReprojThreshold, confidence, maxIters, optional mask - identical call into cv2.findFundamentalMat, identical outputs (nparray_0 = the 3x3 fundamental matrix, nparray_1 = the inlier mask). The two nodes exist because OpenCV's type stubs declare every function twice, once for MatLike and once for UMat, and this pack auto-generates a node for each overload. Same C++ underneath, same behavior in your workflow.
So: everything you'd want to know about _1 is in the _0 article. The short version - it computes the fundamental matrix F relating two uncalibrated camera views from raw pixel correspondences, RANSAC default (method = 8), ransacReprojThreshold at 3.0, and it does not find the matches for you.
The part that actually matters here
When you land on a duplicate node, the real question is "do I use this one or the other?" and the answer is always: whichever the workflow already has. If you're wiring fresh, _0 vs _1 is a coin flip. The twin pattern repeats throughout this pack - _0/_1 pairs, _2/_3 pairs - so once you recognize it, missing or duplicated node numbers stop being confusing and start being predictable.
The other thing worth internalizing: both outputs are NPARRAYs of geometry, not images. The moment you try to visualize F or the mask through Nparrays2Image, you'll meet the pack's signature error: 'NoneType' object has no attribute 'shape'. That error is the pack's way of saying "that output isn't a picture, go read the OpenCV docs for what you asked for."
Install
Standard pack install. ComfyUI Manager → search opencv-comfyui → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/geroldmeisinger/opencv-comfyui
requirements.txt brings in opencv-contrib-python, numpy, torch. The pack imports cv2 at startup; if OpenCV is missing or you have two versions fighting (the guidedFilter import error is the tell), the whole pack refuses to register. All NPARRAY sockets connect to this pack's conversion nodes - Image2Nparray in, Nparrays2Image out, batch size 1 only.
Bottom line: _1 is not a special variant, it's a duplicate. Treat it as a drop-in for _0 and spend your energy on feeding it good matched points, because that's the part that actually decides whether your fundamental matrix is worth anything.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| points1 | NPARRAY | — | |
| points2 | NPARRAY | — | |
| method | INT | — | |
| ransacReprojThreshold | FLOAT | — | |
| confidence | FLOAT | — | |
| maxIters | INT | — | |
| maskopt | NPARRAY | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| nparray_0 | NPARRAY | — |
| nparray_1 | NPARRAY | — |