java imageframe_JAVA中image(用Bufferedinmage得到的image)所在的frame干扰其他frame,原因?解决方法?...

由于图象大小比panel要小,而我希望让图片适应panel的大小,所以用Bufferedimage来得到与panel一样大的图象.现在一切都实现了,都没问题了,图象效果也很好.就是有一个小问题:图象所在的F...

由于图象大小比panel要小,而我希望让图片适应panel的大小,所以用Bufferedimage来得到与panel一样大的图象.现在一切都实现了,都没问题了,图象效果也很好.就是有一个小问题:

图象所在的Frame对其他的frame产生了干扰,具体干扰效果是:此frame像个橡皮一样,慢慢的移动它,当他覆盖了其他frame某部分后再移开,那么那部分该显示的东西都不显示了,要让其重新显示只需把有图象的frame最小化那么其他的frame将变得正常.

我应该说的比较清楚了,请高手为我解惑.

一.到底出现这种问题的原因是什么?

二.我应该怎么解决它?最好给出几句关键代码(要用的方法什么的)

如果真能解决我的问题我再附加20分.

千万注意:我是image加到 panel再加到 frame中的,我希望: 一.不论图片多大总能填满整个frame,而frame大小不变.(图片小了就扩大图片,反之缩小)

二,当在frame中能看见图片后,我用鼠标拉大或缩小frame,图片跟着变化,总之能填满frame.(其实这一点我就是让frame.add(panel.BorderLayout.CENTER)实现的).(因为图片能填满panel,我只需让panel填满frame即可.)

有个关于Bufferedimage的方法(就是使图片大小适应panel大小的方法)位于继承JPanel的类中,函数如下:可能它有问题:::::::(我说的很罗嗦啊,但也很详细了)

public void paint(Graphics g){

try {

src=ImageIO.read(new File("D:/2.jpg"));

//src = src1;

int width = this.getWidth();

int height = this.getHeight();

image = src.getScaledInstance(width, height, Image.SCALE_REPLICATE) ;

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

g.drawImage( image, 0, 0,this);

//image.flush();

}

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C++ 使用 Holistic 模型输出右肩坐标的示例代码如下: ```c++ #include <iostream> #include <vector> #include "mediapipe/framework/formats/image_frame.h" #include "mediapipe/framework/formats/landmark.pb.h" #include "mediapipe/framework/formats/landmark_list.pb.h" #include "mediapipe/framework/port/opencv_highgui_inc.h" #include "mediapipe/framework/port/opencv_imgproc_inc.h" #include "mediapipe/framework/port/status.h" #include "mediapipe/framework/port/statusor.h" #include "mediapipe/framework/tool/options_util.h" #include "mediapipe/framework/tool/status_util.h" #include "mediapipe/framework/calculator_framework.h" #include "mediapipe/framework/calculator_graph.h" #include "mediapipe/framework/formats/matrix.h" #include "mediapipe/framework/formats/matrix_data.pb.h" #include "mediapipe/framework/formats/rect.pb.h" #include "mediapipe/framework/formats/rect.pb.h" #include "mediapipe/framework/formats/classification.pb.h" #include "mediapipe/framework/formats/detection.pb.h" #include "mediapipe/framework/formats/image_frame_opencv.h" #include "mediapipe/framework/formats/matrix.h" #include "mediapipe/framework/formats/matrix_data.pb.h" #include "mediapipe/framework/formats/matrix_opencv.h" #include "mediapipe/framework/formats/rect.pb.h" #include "mediapipe/framework/formats/rect.pb.h" #include "mediapipe/framework/formats/classification.pb.h" #include "mediapipe/framework/formats/detection.pb.h" #include "mediapipe/framework/formats/image_frame_opencv.h" #include "mediapipe/framework/formats/rect.pb.h" #include "mediapipe/framework/formats/rect.pb.h" #include "mediapipe/framework/formats/classification.pb.h" #include "mediapipe/framework/formats/detection.pb.h" #include "mediapipe/framework/formats/image_frame_opencv.h" #include "mediapipe/framework/formats/rect.pb.h" #include "mediapipe/framework/formats/rect.pb.h" #include "mediapipe/framework/formats/classification.pb.h" #include "mediapipe/framework/formats/detection.pb.h" #include "mediapipe/framework/formats/image_frame_opencv.h" #include "mediapipe/framework/port/opencv_highgui_inc.h" #include "mediapipe/framework/port/opencv_imgcodecs_inc.h" #include "mediapipe/framework/port/opencv_video_inc.h" #include "mediapipe/framework/port/opencv_videoio_inc.h" #include "mediapipe/util/resource_util.h" constexpr char kInputStream[] = "input_video"; constexpr char kOutputStream[] = "output_video"; constexpr char kLandmarksStream[] = "pose_landmarks"; constexpr char kWindowName[] = "MediaPipe"; using namespace mediapipe; int main() { // 初始化计算图 CalculatorGraphConfig config = mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"( input_stream: "input_video" output_stream: "output_video" node { calculator: "HolisticTrackingCalculator" input_stream: "IMAGE:input_video" output_stream: "IMAGE:output_video" output_stream: "POSE_LANDMARKS:pose_landmarks" node_options: { [type.googleapis.com/mediapipe.HolisticTrackingCalculatorOptions] { min_detection_confidence: 0.5 min_tracking_confidence: 0.5 } } } )"); CalculatorGraph graph; MP_RETURN_IF_ERROR(graph.Initialize(config)); // 打开摄像头或者视频文件 cv::VideoCapture capture; capture.open(0); cv::namedWindow(kWindowName, cv::WINDOW_NORMAL); cv::resizeWindow(kWindowName, 720, 480); // 处理帧数据 while (capture.isOpened()) { bool grabbed = capture.grab(); if (!grabbed) break; cv::Mat input_frame; capture.retrieve(input_frame, cv::CAP_PROP_CONVERT_RGB); // 将 OpenCV 的 Mat 数据转换成 MediaPipe 的 ImageFrame 数据 auto input_frame_mat = absl::make_unique<cv::Mat>(input_frame); auto input_frame_image = absl::make_unique<ImageFrame>(ImageFormat::SRGB, input_frame.cols, input_frame.rows, ImageFrame::kDefaultAlignmentBoundary); cv::Mat input_frame_mat_bgr; cv::cvtColor(input_frame, input_frame_mat_bgr, cv::COLOR_RGB2BGR); cv::Mat input_frame_mat_bgr_flipped; cv::flip(input_frame_mat_bgr, input_frame_mat_bgr_flipped, /*flipcode=*/1); cv::Mat input_frame_mat_bgr_flipped_aligned; cv::Mat temp_output_frame = cv::Mat::zeros(input_frame_mat_bgr_flipped.rows, input_frame_mat_bgr_flipped.cols, input_frame_mat_bgr_flipped.type()); cv::rotate(input_frame_mat_bgr_flipped, temp_output_frame, cv::ROTATE_90_COUNTERCLOCKWISE); cv::rotate(temp_output_frame, input_frame_mat_bgr_flipped_aligned, cv::ROTATE_180); cv::Mat input_frame_mat_aligned; cv::cvtColor(input_frame_mat_bgr_flipped_aligned, input_frame_mat_aligned, cv::COLOR_BGR2RGB); memcpy(input_frame_image->MutablePixelData(), input_frame_mat_aligned.data, input_frame_mat_aligned.total() * input_frame_mat_aligned.elemSize()); input_frame_image->SetColorSpace(ImageFrame::ColorSpace::SRGB); input_frame_image->set_timestamp(Timestamp(capture.get(cv::CAP_PROP_POS_MSEC) * 1000)); // 向计算图输入数据 MP_RETURN_IF_ERROR(graph.AddPacketToInputStream( kInputStream, Adopt(input_frame_image.release()).At(Timestamp(capture.get(cv::CAP_PROP_POS_MSEC) * 1000)))); // 获取输出结果 mediapipe::Packet pose_landmarks_packet; if (graph.GetOutputLandmarkList(kLandmarksStream, &pose_landmarks_packet)) { auto& pose_landmarks = pose_landmarks_packet.Get<mediapipe::NormalizedLandmarkList>(); if (pose_landmarks.landmark_size() > 0) { // 获取右肩坐标 auto right_shoulder = pose_landmarks.landmark(11); std::cout << "Right shoulder coordinate: (" << right_shoulder.x() << ", " << right_shoulder.y() << ", " << right_shoulder.z() << ")" << std::endl; } } // 获取输出图像 mediapipe::Packet output_packet; if (graph.GetOutputPacket(&output_packet, kOutputStream) && !output_packet.IsEmpty()) { auto& output_frame = output_packet.Get<mediapipe::ImageFrame>(); cv::Mat output_mat = mediapipe::formats::MatView(&output_frame); cv::Mat output_mat_bgr; cv::cvtColor(output_mat, output_mat_bgr, cv::COLOR_RGB2BGR); cv::Mat output_mat_bgr_flipped; cv::flip(output_mat_bgr, output_mat_bgr_flipped, /*flipcode=*/0); cv::imshow(kWindowName, output_mat_bgr_flipped); } if (cv::waitKey(5) == 27) break; } // 关闭计算图 MP_RETURN_IF_ERROR(graph.CloseInputStream(kInputStream)); return graph.WaitUntilDone(); } ``` 需要注意的是,Holistic 模型输出的坐标值是归一化的坐标值,范围在[0, 1]之间。如果需要将其转换为图像坐标或者其他坐标系的坐标值,需要进行相应的转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值