我有一个名为switchCamera的方法,我试图在点击按钮时从前向后切换相机,在一个平滑的过渡中.当我打电话给这个方法时,我的应用程序冻结了 - 我知道我做的不对.有人可以帮我从这里出去吗?
任何帮助深表感谢.
public void switchCamera(){
int camNum = 0;
camNum = Camera.getNumberOfCameras();
int camBackId = Camera.CameraInfo.CAMERA_FACING_BACK;
int camFrontId = Camera.CameraInfo.CAMERA_FACING_FRONT;
Camera.CameraInfo currentCamInfo = new Camera.CameraInfo();
//if camera is running
if (camera != null){
//and there is more than one camera
if (camNum > 1){
//stop current camera
camera.stopPreview();
camera.setPreviewCallback(null);
//camera.takePicture(null, null, PictureCallback);
camera.release();
camera = null;
//stop surfaceHolder?
if (currentCamInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){
//switch camera to back camera
camera=Camera.open(camBackId);
}
else{
//switch camera to front camera
camera=Camera.open(camFrontId);
}
//switch …Run Code Online (Sandbox Code Playgroud) 所以我有以下代码:
private static string FindAppointmentsAsXmlString(CalendarView calendar, ExchangeService serv)
{
FindItemsResults<Appointment> appointments = serv.FindAppointments(WellKnownFolderName.Calendar, calendar);
var serializer = new XmlSerializer(appointments.GetType());
var writer = new StringWriter();
try
{
serializer.Serialize(writer, appointments);
Console.WriteLine(writer.GetStringBuilder().ToString());
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex);
Console.ReadLine();
}
return writer.GetStringBuilder().ToString();
}
Run Code Online (Sandbox Code Playgroud)
初始化序列化程序时,我得到异常:
要成为XML可序列化,从IEnumerable继承的类型必须在其继承层次结构的所有级别都具有Add(System.Object)的实现.
Microsoft.Exchange.WebServices.Data.FindItemsResults未实现Add(System.Object).
我一直在搜索,我得出的结论是我必须添加一个公共的Add(Object obj)方法.现在我不确定这个方法应该包含什么或什么时候被调用,有人能指出我正确的方向吗?Add方法需要手动添加每个约会吗?
非常感激.
我要做的是测量眼镜框的厚度.我有想法测量框架轮廓的厚度(可能是更好的方法?).到目前为止,我已经概述了眼镜的框架,但是有些线条不符合.我想过使用HoughLinesP,但我不确定这是否是我需要的.
到目前为止,我已经执行了以下步骤:
这些是结果:


到目前为止这是我的代码:
//convert to grayscale
cv::Mat grayscaleImg;
cv::cvtColor( img, grayscaleImg, CV_BGR2GRAY );
//create ROI
cv::Mat eyeAreaROI(grayscaleImg, centreEyesRect);
cv::imshow("roi", eyeAreaROI);
//blur
cv::Mat blurredROI;
cv::blur(eyeAreaROI, blurredROI, Size(3,3));
cv::imshow("blurred", blurredROI);
//dilate thin lines
cv::Mat dilated_dst;
int dilate_elem = 0;
int dilate_size = 1;
int dilate_type = MORPH_RECT;
cv::Mat element = getStructuringElement(dilate_type,
cv::Size(2*dilate_size + 1, 2*dilate_size+1),
cv::Point(dilate_size, dilate_size));
cv::dilate(blurredROI, dilated_dst, element);
cv::imshow("dilate", dilated_dst);
//edge detection
int lowThreshold = 100;
int ratio = 3;
int kernel_size = …Run Code Online (Sandbox Code Playgroud) 我有一个存储为byte []数组的图像,我想在将其发送到其他地方(作为byte []数组)之前翻转图像.
我已经搜索过,在没有操作byte []数组中的每个位的情况下找不到简单的解决方案.
如何将字节数组[]转换为某种类型的图像类型,使用现有的翻转方法翻转,然后将其转换回byte []数组?
有什么建议?
干杯!
我的目标是允许我的Android应用程序的用户选择脸部上的点并从该触摸中检索X和Y坐标.请看下面的图片.

我希望用户能够更改选择方块的大小.
到目前为止,我有以下代码,但老实说我不知道从那里去哪里.如何绘制用户可以操作和移动的矩形(然后从中返回X和Y中心点坐标)?我确定这是一个Android功能.
private void selectImg(){
//retrieve X and Y values from touch
surfaceView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent pos) {
//retrieve position when user finishes touch
if (pos.getAction() == MotionEvent.ACTION_UP){
Log.d("X",String.valueOf(pos.getX()));
Log.d("Y",String.valueOf(pos.getY()));
}
return true;
}
});
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
可能有用: 自定义Android Image Crop https://github.com/dtitov/pickncrop/blob/master/src/com/github/pickncrop/MainActivity.java
请参阅以下(两个)解决方案的答案.
我似乎无法使我的逻辑正确,并且由于某种原因,这确实让我,但它似乎(并且可能是)如此简单.我想要做的是捕获图像,如果存在,则增加图像.即photo1.jpg存在,因此将新文件保存为photo2.jpg等.
在我运行我的代码并拍摄照片的那一刻,"photo.jpg"被保存,然后在下一次拍摄时,"photo1.jpg"被保存,然后是"photo11.jpg",然后是"photo111.jpg "等
这是我的代码:
String photoName = "photo.jpg";
String i = "0";
int num = 0;
File photo = new File(Environment.getExternalStorageDirectory(), photoName);
while(photo.exists()) {
//photo.delete();
num = Integer.parseInt(i);
num++;
String concatenatedNum = Integer.toString(num);
StringBuffer insertNum = new StringBuffer(photoName);
photoName = insertNum.replace(5, 5, concatenatedNum).toString();
//insert
photo = new File(Environment.getExternalStorageDirectory(), photoName);
}
FileOutputStream fostream = null;
try {
fostream = new FileOutputStream(photo.getPath());
//MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle, yourDescription);
//write jpeg to local drive
fostream.write(jpeg[0]);
fostream.close();
}
catch (IOException e) { e.printStackTrace(); }
finally …Run Code Online (Sandbox Code Playgroud) 我在图像中有两个点,左眼中心(X,Y)和右眼中心(X,Y).我用两只眼睛画圈cv::circle,这很好.但是我现在要做的就是获得我绘制的圆圈的投资回报率,即提取眼睛并将它们保存在新的垫子中.
这是我目前的结果:

......但正如我上面所说,只需要将眼睛周围的圆圈提取到新的垫子中,每只眼睛一个.
这是我的代码:
cv::Mat plotImage;
plotImage = cv::imread("C:/temp/face.jpg", cv::IMREAD_COLOR);
cv::Point leftEye(person.GetLeftEyePoint().X, person.GetLeftEyePoint().Y);
cv::Point rightEye(person.GetRightEyePoint().X, person.GetRightEyePoint().Y);
cv::circle(plotImage, leftEye, 15, cv::Scalar(255, 255));
cv::circle(plotImage, rightEye, 15, cv::Scalar(255, 255));
cv::imwrite("C:\\temp\\plotImg.jpg", plotImage);
Run Code Online (Sandbox Code Playgroud)
我找到了以下链接,但我似乎无法理解它们/将它们应用到我正在尝试做的事情:http: //answers.opencv.org/question/18784/crop-image-using -hough圈/
任何帮助/指导表示赞赏!谢谢!
有没有比下面的示例更快或更有效的方法将字符串添加到列表?:
List<String> apptList = new List<String>();
foreach (Appointment appointment in appointments){
String subject = appointment.Subject;
//...(continues for another 10 lines)
//...And then manually adding each String to the List:
apptList.Add(subject);
//...(continues for another 10 lines)
//And then send off List apptList to another method
}
Run Code Online (Sandbox Code Playgroud)