我正在用 C# 开发一个应用程序,并且开发了一个用相机做一些事情的库Aforge。要点之一是简单地捕获网络摄像头前面的图像并将其显示在特定的设备上PictureBox:
camera.NewFrame += NewFrame;
private void NewFrame(object sender, NewFrameEventArgs args)
{
Bitmap newFrame = new Bitmap(args.Frame);
args.Frame.Dispose();
PictureBox.FromBitmapImage(newFrame);
newFrame.Dispose();
newFrame = null;
}
Run Code Online (Sandbox Code Playgroud)
我在这里所做的,是获取每一帧并将其绘制到PictureBox.
我的疑问是:
在某些计算机中,这种绘制方式会产生非常高的内存泄漏。相机配置为:640x480,如果更高,内存泄漏会增加。
电脑配置:
Intel i5:内存泄漏至 500Mb
英特尔 i7:无内存泄漏。
Double coeur(没那么强大):没有那么多内存泄漏。
编辑:
public static void FromBitmapImage(this Image image, Bitmap bitmap)
{
BitmapImage bitmapImage = new BitmapImage();
using (MemoryStream memoryStream = new MemoryStream())
{
bitmap.Save(memoryStream, ImageFormat.Bmp);
memoryStream.Position = 0;
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.CacheOption = …Run Code Online (Sandbox Code Playgroud) 我正在使用此代码来制作自定义相机裁剪:
UIImagePickerController 编辑视图圆圈叠加
这在相机胶卷中效果很好,但不能拍照
如果我更改 [navigationController.viewControllers count] == 3 --> [navigationController.viewControllers count] == 1 也适用于相机,但不适用于下一个视图(您接受使用照片的预览视图)
谁来帮帮我??
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0) {
NSLog(@"Camara");
UIImagePickerController * imagePicker = [[UIImagePickerController alloc] init];
imagePicker.allowsEditing = YES;
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
self.isCamera = YES;
[self presentViewController:imagePicker animated:YES completion:nil];
}else{
NSLog(@"Carrete");
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc]init];
imagePickerController.allowsEditing = YES;
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
self.isCamera = NO;
[self presentViewController:imagePickerController animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
if …Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用 Unity 原生 UI。
在场景中,我有游戏对象“Canvas”,在这个对象中我使用了一些 UI 对象。
但我在 Canvas 中没有找到任何相机,而且我不知道如何从代码中获取它。在某些任务中,我需要将 ScreenPosition 转换为 WorldPosition,但我不能。
有谁能够帮助我。如何在代码或其他替代方案中获取相机?
我搜索了许多有关堆栈溢出的相关问题,但我找不到这个问题的答案。
我的场景中有一大群动态的 Object3D,并用正交相机正面观察它们。
我想要一个简单的函数,在调用时,它会简单地匹配正交相机的上/左/下/右/缩放属性,以正确适应 Object3D 组。
我尝试了各种方法,但我的代码都不值得发布。我需要从一个全新的角度来看待这个问题(双关语)。我找到了各种其他答案,讨论改变相机的视场,一旦你知道从组的边界框的表面到相机的距离,但我不知道如何用正交相机来实现它,因为(据我尝试过)fov 属性不适用于它(也许它实际上适用,我只是不知道)。
所以我不太喜欢索要代码,但尽管如此,我还是想要一个函数,它可以自动调整正交相机的适当属性,以适应作为参数传递给它的对象,例如:
function fitOrthographicCameraToObject3DGroup(group) {
//implement here (my question)
}
Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习 Three.js,在编写一个函数时遇到了一些麻烦,该函数以对象位置(Vector3)和以毫秒为单位的时间作为参数,并逐渐旋转相机以面对它。本质上是内置 LookAt 方法的 lerp 版本。
首先,我尝试使用 tweenjs 来获得平滑的旋转过渡。对于开始和结束参数,我创建了一个虚拟对象,并将其位置、旋转和四元数设置为与相机相同,然后我使用其上的 LookAt 函数面向对象,并将其四元数存储在新变量“targetQuaternion”。然后我使用这个变量作为TWEEN.Tween方法中的目标参数来更新camera.quaternion。我之前曾尝试过使用四元数来避免健身房锁定,然后尝试旋转,但没有一个能正常工作。
function rotateCameraToObject(object3D, time) {
var cameraPosition = camera.position.clone(); // camera original position
var cameraRotation = camera.rotation.clone(); // camera original rotation
var cameraQuaternion = camera.quaternion.clone(); // camera original quaternion
var dummyObject = new THREE.Object3D(); // dummy object
// set dummyObject's position, rotation and quaternion the same as the camera
dummyObject.position.set(cameraPosition.x, cameraPosition.y, cameraPosition.z);
dummyObject.rotation.set(cameraRotation.x, cameraRotation.y, cameraRotation.z);
dummyObject.quaternion.set(cameraQuaternion.x, cameraQuaternion.y, cameraQuaternion.z);
// lookAt object3D
dummyObject.lookAt(object3D);
// store its quaternion in a variable
var …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的 SLAM 项目模拟镜头失真效果。扫描的彩色 3D 点云已经提供并加载到 OpenGL 中。我想要做的是以给定的姿势渲染 2D 场景,并在来自鱼眼相机的真实图像和渲染图像之间进行一些视觉测距。由于相机镜头畸变严重,渲染阶段也要考虑。
问题是我不知道把镜头畸变放在哪里。着色器?
我找到了一些开放代码,将失真放入几何着色器中。但是我猜这个畸变模型与计算机视觉社区中的镜头畸变模型不同。在 CV 社区中,镜头畸变通常发生在投影平面上。
这个与我的工作非常相似,但他们没有使用失真模型。
有人有好主意吗?
我刚刚找到了另一个实现。他们的代码在片段着色器和几何着色器中实现了失真。但是片段着色器版本可以应用于我的情况。因此,我想以下内容会起作用:
# vertex shader
p'=T.model x T.view x p
p_f = FisheyeProjection(p') // custom fish eye projection
Run Code Online (Sandbox Code Playgroud) 我正在做的事情是一个物体在平面上移动,而相机位于它的中心。我得到了它,所以相机随着鼠标旋转,当主相机看到游戏对象时,它会停止。所以我使用了 onbecamevisible() 和 onbecameinvisible() 函数,但这适用于任何相机,包括场景视图。如何使对象在仅被主游戏摄像机看到时停止?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cubeMove : MonoBehaviour,moveObject
{
Camera cam;
public Transform checkedObject;
void Start()
{
cam = GetComponent<Camera>();
}
void Update()
{
Vector3 viewPos = cam.WorldToViewportPoint(checkedObject.position);
if ()
move();
}
public void move()
{
transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime);
}
Run Code Online (Sandbox Code Playgroud)
}
这是我的相机脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Camera : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public …Run Code Online (Sandbox Code Playgroud) 我有一个场景,我想将透视对象(即远离时看起来较小的对象)与正交对象(即,无论距离如何都显示相同大小的对象)结合起来。透视对象是渲染“世界”的一部分,而正交对象是装饰品,如标签或图标。与 HUD 不同的是,我希望正交对象在世界“内部”渲染,这意味着它们可以被世界对象覆盖(想象一下在标签之前经过的平面)。
我的解决办法是使用一个渲染器,但两个场景,一个具有PerspectiveCamera和一个带OrthogographicCamera。我在不清除 z 缓冲区的情况下按顺序渲染它们(渲染器的autoClear属性设置为false)。我面临的问题是,我需要同步每个场景中对象的放置,以便为一个场景中的对象分配一个 z 位置,该位置位于另一个场景中位于它之前的对象之后,但位于其之前的对象之前在它后面。
为此,我将我的透视场景指定为“领先”场景,即。所有对象的所有坐标(透视和正交)都是基于这个场景分配的。透视对象直接使用这些坐标并在该场景中使用透视相机进行渲染。正交对象的坐标被转换为正交场景中的坐标,然后使用正交相机在该场景中渲染。我通过将透视场景中的坐标投影到透视相机的视图窗格,然后使用正交相机返回到正交场景来进行转换:
position.project(perspectiveCamera).unproject(orthogographicCamera);
Run Code Online (Sandbox Code Playgroud)
唉,这并不像预期的那样工作。正交对象总是在透视对象之前渲染,即使它们应该在它们之间。考虑这个例子,其中蓝色圆圈应该显示在红色方块后面,但在绿色方块之前(它不是):
var pScene = new THREE.Scene();
var oScene = new THREE.Scene();
var pCam = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 1, 1000);
pCam.position.set(0, 40, 50);
pCam.lookAt(new THREE.Vector3(0, 0, -50));
var oCam = new THREE.OrthographicCamera(window.innerWidth / -2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / -2, 1, 500);
oCam.Position = pCam.position.clone();
pScene.add(pCam);
pScene.add(new THREE.AmbientLight(0xFFFFFF)); …Run Code Online (Sandbox Code Playgroud) javascript camera projection coordinate-transformation three.js
OV5640 相机的Linux 驱动程序提供了有限的功能。
static struct i2c_driver ov5640_i2c_driver = {
.driver = {
.name = "ov5640",
.of_match_table = ov5640_dt_ids,
},
.id_table = ov5640_id,
.probe = ov5640_probe,
.remove = ov5640_remove,
};
Run Code Online (Sandbox Code Playgroud)
这些功能是name、probe和remove。
我对驱动程序不是很熟悉,但我找不到渲染像素的驱动程序的任何部分,因此我可以将它们存储到数组中。我也找不到任何用于读取像素的虚拟内存地址。
捕获的图像数据传输发生在代码的哪一部分?我正在寻找两个位置:一个在驱动程序中,一个在调用驱动程序的更高级别。
我和我的朋友正在构建一个需要相机访问权限的应用程序,我们在让相机与 iOS 一起工作时遇到了一些问题(我们使用的是 iOS13):
Safari 在获取相机内容后立即冻结,chrome 和 edge 根本无法访问相机。我们的代码如下:
let windowWidth=window.innerWidth;
let windowHeight=window.innerHeight;
function isMobile() {
const isAndroid = /Android/i.test(navigator.userAgent);
const isiOS = /iPhone|iPad|iPod/i.test(navigator.userAgent);
return isAndroid || isiOS;
}
async function setupCamera() {
video = document.getElementById('video');
console.log("a")
video.setAttribute('autoplay', '');
video.setAttribute('muted', '');
video.setAttribute('playsinline', '');
const stream = await navigator.mediaDevices.getUserMedia({
'audio': false,
'video': {
facingMode: 'user',
width: mobile ? undefined : windowWidth,
height: mobile ? undefined : windowHeight
},
});
console.log("b")
video.srcObject = stream;
return new Promise((resolve) => {
video.onloadedmetadata = () …Run Code Online (Sandbox Code Playgroud) camera ×10
javascript ×3
ios ×2
three.js ×2
aforge ×1
android ×1
c# ×1
canvas ×1
distortion ×1
driver ×1
fisheye ×1
gameobject ×1
getusermedia ×1
imx6 ×1
linux-kernel ×1
memory-leaks ×1
opengl ×1
projection ×1
quaternions ×1
rotation ×1
shader ×1