OpenCV projectPoints_1
ProjectPoints_1 — should you actually install the camera-calibration dragon?
- objectPoints
- rvec
- tvec
- cameraMatrix
- distCoeffs
- imagePoints
- jacobian
- nparray_0
- nparray_1
Here's the shortest useful version of this article: projectPoints_1 is a byte-for-byte twin of projectPoints_0, both generated from cv2.projectPoints overloads, and both project 3D world points into 2D image coordinates given a camera's intrinsics, rotation, and translation. There's no difference to choose between them.
The longer version is about whether you should care, because this is a node you'll either never touch or deeply need.
What it computes
The pinhole-camera projection: rotate the 3D points by rvec, translate by tvec, divide by depth, then map through cameraMatrix and correct for distCoeffs. Out come the 2D image points (nparray_0) and the projection's Jacobian (nparray_1, the derivative matrix optimizers use). All six required inputs - objectPoints, rvec, tvec, cameraMatrix, distCoeffs, aspectRatio - are things a calibrated-camera workflow already has and an image-generation workflow almost certainly doesn't.
The honest "should you?" checklist
You need projectPoints_1 if: you're doing camera calibration, pose estimation, or AR-style projection inside ComfyUI - drawing a 3D bounding box on a real photo, verifying a solvePnP result, building a calibration harness. Then this is the right tool, because it's a faithful port of the canonical OpenCV function and there's nothing friendlier in this space.
You don't need it if: your work is text-to-image or image-to-image. There is no way to get a real cameraMatrix for a generated image - it has no physical lens. A node asking for intrinsics is not the tool for "add a cool perspective to my anime girl." Skip it and don't feel bad.
The setup cost, in full
Everything is an NPARRAY, including cameraMatrix. That means you can't type a matrix into a widget - you have to build a 3×3 float32 array upstream, which this pack doesn't make pleasant. aspectRatio is a required FLOAT here (1.0 is neutral) even though OpenCV treats it as optional in most callers - that's an artifact of the auto-generator picking the fullest overload. And the imagePoints/jacobian optional inputs are out-parameters; the pack README's rule is to leave those unconnected.
Oh, and one more reason to double-check you actually want this: the pack's whole "expect dragons" warning from its author, Gerold Meisinger. When he released opencv-comfyui on r/comfyui in April 2025, he was explicit that these auto-generated nodes are for small, quick transformations - "not full-blown OpenCV apps within Comfy." projectPoints_1 is exactly the kind of node that pushes against that boundary: powerful, correct, and entirely uncompromising about making you supply a calibrated camera.
Install
Same as the rest of the pack, no special requirements:
cd ComfyUI/custom_nodes
git clone https://github.com/geroldmeisinger/opencv-comfyui
restart, then pip install opencv-contrib-python - or search "opencv-comfyui" in ComfyUI Manager and click install.
Bottom line
If you're building a real vision pipeline, projectPoints_1 is a legitimate, faithful building block - arguably the most "real computer vision" node in the whole pack. If you're not, it's a nice reminder that this pack is a mixed bag of genuinely useful tools and textbook-grade overkill. Know which one you're holding before you wire it up.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| objectPoints | NPARRAY | — | |
| rvec | NPARRAY | — | |
| tvec | NPARRAY | — | |
| cameraMatrix | NPARRAY | — | |
| distCoeffs | NPARRAY | — | |
| aspectRatio | FLOAT | — | |
| imagePointsopt | NPARRAY | — | |
| jacobianopt | NPARRAY | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| nparray_0 | NPARRAY | — |
| nparray_1 | NPARRAY | — |